[英]C# open UserControl from UserControl
我试图让我的UserControl
位于我的SplitPanel
的左侧,以在右侧打开一个新的用户控件。 上方的按钮在左侧打开一个UserControl
; 但是,我无法通过左侧的按钮在SplitPanel
的右侧打开新的UserControl
。 感谢我可以获得的任何帮助。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
#region Buttons
private void button1_Click(object sender, EventArgs e)
{
if (!splitContainer1.Panel1.Controls.Contains(left_Settings.Instance))
{
splitContainer1.Panel1.Controls.Add(left_Settings.Instance);
left_Settings.Instance.Dock = DockStyle.Fill;
left_Settings.Instance.BringToFront();
}
else
{
left_Settings.Instance.BringToFront();
}
}
--
public partial class left_Settings : UserControl
{
private static left_Settings _instance;
public static left_Settings Instance
{
get
{
if (_instance == null)
{
_instance = new left_Settings();
}
return _instance;
}
}
public left_Settings()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (!splitContainer1.Panel2.Controls.Contains(right_settings_start.Instance))
{
splitContainer1.Panel2.Controls.Add(right_settings_start.Instance);
right_settings_start.Instance.Dock = DockStyle.Fill;
right_settings_start.Instance.BringToFront();
}
else
{
right_settings_start.Instance.BringToFront();
}
}
private void button2_Click(object sender, EventArgs e)
{
//Some code
}
}
--
public partial class right_settings_start : UserControl
{
private static right_settings_start _instance;
public static right_settings_start Instance
{
get
{
if (_instance == null)
{
_instance = new right_settings_start();
}
return _instance;
}
}
public right_settings_start()
{
InitializeComponent();
}
}
我的代码执行了类似的操作,但是使用面板并直接实例化控件,而不是使用内部的“ instance”属性。
Control myControl = new Control();
//Do initialization stuff
RightPanel.Controls.Add(myControl);
//Do Docking and Layout stuff
myControl.Show();
从我可以看到的是,您唯一缺少的是Control.Show()
命令。 确保您的控件实际上已加载,这不仅仅是将其添加并放到最前面,您还必须告诉代码显示它。 在Control_Load
事件中设置断点应该可以确保它实际显示。
更新
这可能不起作用的另一个原因是,SplitContainer本身作为表单上的对象存在,但是您正在尝试从left_settings对象内部访问它……看不到它。 尝试改用this.ParentForm.splitContainer1
引用它,看看是否可以找到它。 如果left_settings无法看到它,则可能需要使其成为公共对象,或者为其提供其他访问器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.