将表单传递给用户控件会破坏设计器
本文关键字:控件 表单 给用户 | 更新日期: 2023-09-27 18:18:36
我有一个用户控件(section1),我需要将引用传递给我的主表单(Form1)。问题是,每当我将表单作为参数传递给section1的构造函数时,它就会破坏设计器并得到错误:
Type 'M.section1' does not have a constructor with parameters of types Form.
The variable 's1' is either undeclared or was never assigned.
Form1.Designer.cs
this.s1 = new M.section1(this); // this is the line that causes the problem
section1.cs用户控件
public partial class section1 : UserControl
{
private Form1 f { get; set; }
public section1(Form1 frm) // constructor
{
f = frm;
}
}
很奇怪,即使当我在设计器中打开Form1时,它给了我错误,它编译得很好,参考实际上有效,我可以从用户控件访问Form1。有什么建议吗?谢谢!
设计器使用反射来创建控件的实例。因此你需要一个默认构造函数——这就是它要找的。
public partial class section1 : UserControl
{
private Form1 f { get; set; }
public section1() // designer calls this
{
InitializeComponent(); //I hope you haven't forgotten this
}
public section1(Form1 frm) : this() //call default from here : at runtime
{
f = frm;
}
}
我总是使用的解决方案是有一个默认构造函数或添加一个默认的null
值到frm
参数:
public section1(Form1 frm = null)
{
f = frm;
}
你可能需要在这里和那里添加一些null
检查