c# - 当我创建继承自 Form 的新类时,Visual Studio 会更改设计器生成的代码

标签 c# winforms inheritance windows-forms-designer

根据建议,我在新线程中提出这个问题。这个问题源于 Reza 对 this question 的回答。 ,我希望自定义属性显示在表单的设计器中。

为了实现这一点,我需要创建一个类,我们将其命名为 BaseForm 并让 BaseForm 继承自 System.Windows.Forms.Form > 我应该将所需的属性添加到此类中,并让我的用户表单继承自 BaseForm。像这样:

public partial class BaseForm : Form
{
    [Browsable(true), Description("test property"), Category("Appearance")]
    public Color bCol { get; set; }
}

public partial class Form1 : BaseForm
{
    public Form1()
    {
        InitializeComponent();
    }
}

但是,当我这样做时,Visual Studio 将设计器生成的 Partial class Form1(InitializeComponent 等所在位置)更改为 partial class BaseForm。这伴随着 InitializeComponent 不在 Form1 范围内的错误,所以我将其更改为:

public partial class BaseForm : Form
{
    [Browsable(true), Description("test property"), Category("Appearance")]
    public Color bCol { get; set; }
    public BaseForm()
    {
        InitializeComponent();
    }
}

public partial class Form1 : BaseForm
{
    /*public Form1()
    {
        InitializeComponent();
    }*/
}

这违背了 Form1 继承自 BaseForm 的目的,因为我在设计器中看到的是继承自 BaseForm Form,而不是像我希望的那样继承自 BaseFormForm1

为什么 Visual Studio 会这样做?我可以采取什么措施来解决这个问题?

最佳答案

设计者编辑文件中的第一个类。您已将 BaseForm 作为 .cs 文件中的第一类。

要解决此问题,请将其放在单独的文件中或将 BaseForm 的代码移到 Form1 代码之后。

一般来说,最好将 BaseForm 的代码分开,因此最好将新表单添加到项目中并将其命名为 BaseForm 并向表单添加其他属性,然后对于其他表单,添加Inherited Form或添加新的Form并手动更改基类名称。

关于c# - 当我创建继承自 Form 的新类时,Visual Studio 会更改设计器生成的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36762789/

相关文章:

c# - WCF 错误 : extension could not be loaded

c# - 使用 System.Web.Caching.Cache

c# - LINQ - 在 IList 和字符串列表之间搜索

c# - 为什么点击ToolStripMenuItem需要两次点击?

c++ - 在 C++ 中调用来自世界的私有(private)方法

ios - 父子 uitableviewcell 之间共享 xib 文件

c# - XPath 搜索所有文本节点,而不是任何其他子节点的内部文本

c# - 导出datagridview到word文档c#

c# - 在 WinForm C# 中单击按钮打印表单

c++ - 覆盖另一个类中的虚方法以访问其在 C++ 中的成员