【问题标题】:Designer error when inheriting forms继承表单时的设计器错误
【发布时间】:2013-05-11 05:11:41
【问题描述】:

当我继承基本表单时,尝试打开设计器时出现以下错误:

“无法显示此文件的设计器,因为没有 可以设计其中的类。设计师检查了 文件中的以下类: frmTest --- 基类 无法加载“TestInherit.BaseForm”。确保组件有 已被引用,并且所有项目都已构建。”

在设计器代码中,我使用“Inherits BaseForm”(= Windows 窗体)而不是默认的“Inherits System.Windows.Forms.Form”。

我在这里做错了什么?

注意:如果需要,可以在此处下载测试项目:https://dl.dropboxusercontent.com/u/5391091/TestInherit.rar

注意:我想要/需要同一程序集中的所有(基本)表单。

注意:使用 Telerik 表单时,同样的技术可以正常工作。请参阅此示例项目,使用 Telerik:https://dl.dropboxusercontent.com/u/5391091/TestInheritTelerik.rar

【问题讨论】:

  • 您在打开设计表单之前是否进行了构建?
  • 将基础表单放在单独的程序集中,构建它,并将其引用到必须继承BaseForm的程序集
  • 老实说,将 BaseForm 放在另一个程序集中并不是一个好选择,因为这两种表单都使用受保护的共享类(只能从同一个程序集中访问)。
  • 如果你想使用可视化设计器,你别无选择。 protected 成员在与基类相关的类中可见。听起来您在谈论internal 成员。如果是这样的话,有a way around that作为墙
  • 您能在 Telerik 表单的 .dll 中添加代码(如:放入您自己的代码)吗?!

标签: c# vb.net winforms inheritance


【解决方案1】:

正如我在 cmets 中发布的,解决方案是将基本表单移动到不同的程序集。

(请原谅另一个项目是 C#,我无法添加 VB.NET 项目)

现在看一下继承形式:

我所做的只是将Import 添加到frmTest.Designer.vb:

之所以这样,是因为 VS 可视化器实际上创建了一个基本表单的运行实例,当您被设计时frmTest

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    相关资源
    最近更新 更多