将表单传递给用户控件会破坏设计器

时间:2013-06-15 10:36:52

标签: c# reference

我有一个用户控件(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。有什么建议?谢谢!

2 个答案:

答案 0 :(得分:1)

Designer使用反射来创建控件的实例。因此,您需要一个默认构造函数 - 这就是它所寻找的。

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支票。