如何使用UserControl控制MainForm的面板

本文关键字:MainForm 控制 何使用 UserControl | 更新日期: 2023-09-27 18:35:19

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

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

如何使用UserControl控制MainForm的面板

问题是你的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));

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

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

如果您对可重用性感兴趣,请在构造函数中传递formcontrol。顺便说一下,形式也是控制的衍生物。FindForm也是一样.如果你提到MainForm - 它是紧密耦合的。如果您使用form - 它可以是任何形式。通常,人们会传递要在其上添加新控件的实际图面 [控件]。