winforms 继承窗体时不显示C#设计器

vaqhlq81  于 2023-06-24  发布在  C#
关注(0)|答案(3)|浏览(208)

我在导出一个名为PrinterForm的表单时遇到了一个问题这是表单的代码:

public partial class PrinterForm : Form
{
    public PrinterForm()
    {
        InitializeComponent();
    }

    private void PrinterForm_Load(object sender, EventArgs e)
    {
        LoadSomething();
    }

    private void LoadSomething()
    {
        //Return a List<dynamic> of Dapper (query work fine!). The function is already used elsewhere so no problem here
        var list = new DapperRepository().GetAllOfSomething(); 
    }
}

下面是children表单的代码:

public partial class FormChildren : PrinterForm
{
    public FormChildren()
    {
        InitializeComponent();
    }
}

当我尝试访问FormChildren设计器时,报告了一个错误,但未显示。向我报告的错误如下:
System.Windows.Forms.Design.IEventHandlerService
尝试注解LoadSomething函数可以正确显示设计器。
有什么问题吗?

qlckcl4x

qlckcl4x1#

我认为你的问题是在LoadSomething函数中,你应该尝试放置一个条件,这样当你使用设计器时它就不会被执行。
参见:Error when opening designer on inherited form

332nm8kg

332nm8kg2#

我也有同样的问题。我通过在子窗体构造函数中添加base()来解决这个问题。

public partial class FormChildren : ParentForm
{
    public FormChildren() : base()
    {
        InitializeComponent();
    }
}
ehxuflar

ehxuflar3#

当您将名称空间从方括号更改为新的简写形式命名空间xxx时,可能会发生这种情况;在任何继承的表单form.cs文件中。
例如,这起作用:
命名空间xxx { public partial class InheritedForm:Form { yourcode...{\fnSimHei\bord1\shad1\pos(200,288)}
这不起作用:
namespace xxx; public partial class InheritedForm:Form { yourcode ...}
此外,您必须有一个构造函数,该构造函数不包含用于初始化组件的参数:

public BaseForm()
{
    InitializeComponent();
}

相关问题