我有一个用户控件(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。有什么建议?谢谢!
答案 0 :(得分:1)
Designer使用反射来创建控件的实例。因此,您需要一个默认构造函数 - 这就是它所寻找的。 p>
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;
}
}
答案 1 :(得分:0)
我一直使用的解决方案是使用默认构造函数或向null
参数添加默认frm
值:
public section1(Form1 frm = null)
{
f = frm;
}
您可能需要在此处添加一些null
支票。