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

本文关键字:控件 表单 给用户 | 更新日期: 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检查