如何使用UserControl控制MainForm面板?

时间:2014-12-26 21:50:27

标签: c# winforms

MainForm myMainForm;

private void ButtonResort_MouseClick(object sender, MouseEventArgs e)
{
    panelSub.Controls.Add(new myUserControl());
}

将myUserControl添加到我的MainForm之后。如何将myUserControl2添加到MainForm的其他面板?

public partial class myUserControl : UserControl
{
    MainForm myMainForm;

    public myUserControl()
    {
        InitializeComponent();
    }

    private void Button1_MouseClick(object sender, MouseEventArgs e)
    {
        myMainForm.PanelBody.Controls.Add(new myUserControl2());
    }
}

这是我尝试的代码,它只是给了我一个错误。 “对象引用未设置为对象的实例。”

2 个答案:

答案 0 :(得分:3)

问题是您的myMainForm从未设置

您可以在myUserControl构造函数

中进行设置
public partial class myUserControl : UserControl
{
    MainForm myMainForm;

    public myUserControl(MainForm mainForm)
    {
        InitializeComponent();
        myMainForm = mainForm;
    }

    private void Button1_MouseClick(object sender, MouseEventArgs e)
    {
        myMainForm.PanelBody.Controls.Add(new myUserControl2());
    }
}

用法

panelSub.Controls.Add(new myUserControl(this));

答案 1 :(得分:0)

作为在构造函数中传递表单的替代方法,您可以这样做:

private void Button1_MouseClick(object sender, MouseEventArgs e)
{
    myMainForm = this.FindForm as MainForm;
    if (myMainForm != null)
        myMainForm.PanelBody.Controls.Add(new myUserControl2());
}

如果您对可重用性感兴趣,可以在构造函数中传递formcontrol。形式也是控制btw的衍生物。与FindForm相同。如果你提到MainForm - 它是紧密耦合的。如果您使用form - 它可以是任何形式。通常,人们通过实际表面[控制]来添加新控件。