繁体   English   中英

C#从UserControl打开UserControl

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM