如何使用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());
}
}
这是我尝试过的代码,它只是给了我一个错误。"对象引用未设置为对象的实例。"
问题是你的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());
}
如果您对可重用性感兴趣,请在构造函数中传递form
或control
。顺便说一下,形式也是控制的衍生物。FindForm
也是一样.如果你提到MainForm
- 它是紧密耦合的。如果您使用form
- 它可以是任何形式。通常,人们会传递要在其上添加新控件的实际图面 [控件]。