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());
}
}
这是我尝试的代码,它只是给了我一个错误。 “对象引用未设置为对象的实例。”
答案 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());
}
如果您对可重用性感兴趣,可以在构造函数中传递form
或control
。形式也是控制btw的衍生物。与FindForm
相同。如果你提到MainForm
- 它是紧密耦合的。如果您使用form
- 它可以是任何形式。通常,人们通过实际表面[控制]来添加新控件。