你能从继承普通表单的自定义表单继承吗

Posted

技术标签:

【中文标题】你能从继承普通表单的自定义表单继承吗【英文标题】:Can You Inherit from a Custom Form that Inherits a Normal Form 【发布时间】:2017-12-30 11:59:36 【问题描述】:

在过去的几个小时里,我一直在尝试解决一个我不明白到底出了什么问题的问题。我正在为一个需要多个几乎相同但不完全相同的表单的项目构建一个 GUI 系统。我想我有一个类(如下所示)继承了标准的普通表单。

class GUIWindow : Form, IGUIWindow

    public GUIWindow() : base()
    

    

    public GUIWindow(string name) : base()
    
        this.Name = name;
    

还有一个继承第一个类的第二个类(如下),这样我对基类所做的任何更改都会影响所有子类,并且会有四个左右的子类。

class GUIWindowText : GUIWindow, IGUIWindow


    public GUIWindowText() : base()  

    public GUIWindowText(string name) : base()
    
        this.Name = name;
    

但如果我在 Visual Studio (2017) 中查看设计器,我会收到此错误:

Constructor on type 'LCARS.GUIWindow' not found.

即使我确实提供了一个空的构造函数。所以我肯定遗漏了一些明显的东西,但我不知道是什么。

编辑

它编译得很好。我就是看不到设计师

【问题讨论】:

它编译没有错误吗? @BradleyUffner 是的,它可以编译,但我看不到设计器 除了拥有公共无参数构造函数之外,尝试同时创建两个表单类public,并确保每个类都调用其各自的InitializeComponent 【参考方案1】:

让 Visual Studio 创建继承的表单:在您的项目中右键单击解决方案资源管理器以打开上下文菜单,添加 > 新项目 > 继承的表单(在 Windows 表单部分中),然后单击“添加”。这将打开一个向导,要求您提供基本表单,选择GUIWindow 并单击确定。 VS 然后正确设置派生形式。

注意:如果您想更改派生表单中存在的基本表单的控件(例如,更改它们的大小或移动它们),您必须将它们的可访问性从 private 更改为 protected

【讨论】:

那行不通。它确实创建了一个类,但我不能使用设计器。 您是否通过在 VS 中插入新项“Windows 窗体”来创建基本窗体 GUIWindow?您需要这样做,因为您需要带有部分类和 InitalizeComponent 方法的整个设置。如果您手动创建类,这将不起作用。 (即让VS创建两个Forms。)您仍然可以在之后自动创建的Form中实现接口。

以上是关于你能从继承普通表单的自定义表单继承吗的主要内容,如果未能解决你的问题,请参考以下文章

自定义事件-继承表单

让MAUI页面继承表单自定义基类

Django表单,表单字段的继承和顺序

会话保持及Form表单--Form表单

为什么工具提示出现在我的自定义控件上?

具有过滤查询集的组权限的自定义表单