【问题标题】:C# designer is not shown when Inheritance form继承表单时不显示 C# 设计器
【发布时间】:2017-04-07 09:12:00
【问题描述】:

我在派生名为 PrinterForm 的表单时遇到问题 这是parent表单的代码:

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(); 
    }
}

这是子窗体的代码:

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

当我尝试访问FormChildren 设计器时,会报告一个错误并且未显示。 报告给我的错误如下:

System.Windows.Forms.Design.IEventHandlerService

尝试评论LoadSomething函数可以正确显示设计器。

有什么问题?

【问题讨论】:

  • 是在运行应用程序时还是在 Visual Studio Designer 中发生的?
  • @krw12572 Visual Studio 设计师
  • FormChildren 类的代码中,您似乎正在访问父类中的 InitializeComponent 方法,或者您创建了另一个 WindowsForm(FormChildren) 并试图继承 PrinterForm。这两个选项似乎都不正确。如果你想继承一个表单,那么只需创建一个简单的类并继承已经创建的PrinterForm。然后看看你的问题是否仍然存在。
  • @krw12572 如您所述,我尝试创建一个简单的类,并派生父类。结果一样!
  • @LorenzoBelfanti 当您在设计器中打开继承的表单时,将执行基本表单的构造函数。事实上,设计者创建了一个基本表单的实例并在其上放置控件。因此,例如附加在基本形式的构造函数中的基本形式的加载事件将被执行。要了解有关设计师如何工作的更多信息,请查看此帖子:Can't view designer when coding a form in C#。它还包含一个有趣的例子。你会发现它很有用。

标签: c# winforms inheritance windows-forms-designer form-load


【解决方案1】:

我遇到了同样的问题。我通过将 base() 添加到子表单构造函数来解决我的问题。

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

【讨论】:

    【解决方案2】:

    我认为您的问题出在LoadSomething 函数中,您应该尝试设置一个条件,以便在您与设计器合作时不执行它。

    见:Error when opening designer on inherited form

    【讨论】:

      猜你喜欢
      • 2013-05-11
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多