C#从UserControl打开UserControl

时间:2016-03-10 19:33:24

标签: c# winforms user-controls

我试图在我UserControl的左侧获取我的SplitPanel以在右侧打开一个新的用户控件。上面的按钮在左侧打开UserControl;但是,我无法通过左侧的按钮在UserControl的右侧打开新的SplitPanel。感谢我能得到的任何帮助。

enter image description here

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();
    }
}

1 个答案:

答案 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无法看到它,或者为它提供一些其他访问器,则可能需要将其设为公共对象。