我试图在我UserControl
的左侧获取我的SplitPanel
以在右侧打开一个新的用户控件。上面的按钮在左侧打开UserControl
;但是,我无法通过左侧的按钮在UserControl
的右侧打开新的SplitPanel
。感谢我能得到的任何帮助。
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();
}
}
答案 0 :(得分:1)
我的代码做了类似的事情,但是使用面板并直接实例化控件而不是使用内部"实例"属性。
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无法看到它,或者为它提供一些其他访问器,则可能需要将其设为公共对象。