C# 如何将VS Designer中已创建的控件更改为从其他类继承

C# 如何将VS Designer中已创建的控件更改为从其他类继承,c#,winforms,visual-studio,ide,C#,Winforms,Visual Studio,Ide,所以情况是这样的, 我有一个使用VS IDE(VS2013标准)创建的toolstrip。我已经为此做了很多工作,例如添加按钮、挂钩事件等 我现在可以将此控件更改为从自定义toolstrip类继承,而不必创建自定义控件并重新执行所有工作吗 我尝试将Designer.cs更改为使用父类,但当我返回表单设计器时,更改被逆转 编辑: 为了让事情更清楚一点,如果您熟悉xCode,我将尝试设置IDE对象的CustomClass。您想要的是可视继承,您可以在这里找到详细的描述: 如果要更改myForm.De

所以情况是这样的,

我有一个使用VS IDE(VS2013标准)创建的toolstrip。我已经为此做了很多工作,例如添加按钮、挂钩事件等

我现在可以将此控件更改为从自定义toolstrip类继承,而不必创建自定义控件并重新执行所有工作吗

我尝试将Designer.cs更改为使用父类,但当我返回表单设计器时,更改被逆转

编辑:


为了让事情更清楚一点,如果您熟悉xCode,我将尝试设置IDE对象的CustomClass。

您想要的是可视继承,您可以在这里找到详细的描述:


如果要更改myForm.Designer.cs,则

  • 关闭设计器
  • 在*.Designer.cs
    private ParentToolStrip myToolStrip中更改控件字段的类型
  • new
    命令
    myToolStrip=newparenttoolstrip()中更改类型
  • 构建项目
  • 仅当生成成功时(!):在设计器中打开表单
  • 我已经做过很多次了。它起作用了

    确保选中了可能干扰设计器的任何代码:

    if (!DesignMode) {
        // Your code.
    }
    
    请注意,这在构造函数中不起作用,因为
    DesignMode
    属性当时尚未初始化。在构造函数中,您可以对设计模式进行如下测试:

    bool designMode = LicenseManager.UsageMode == LicenseUsageMode.Designtime;
    

    你能发布一些你目前掌握的代码吗?另外,你介意把你的第三段解释一下吗?您是否刚刚设置了类的继承,并且它在设计器中看起来没有什么不同:
    class ChildClass:ParentClass{…}
    或者您到目前为止尝试了什么?我假设您创建了一个UserControl,而不是自定义控件。添加一个新的继承的用户控件(添加>新项>继承的用户控件)并复制粘贴到目前为止完成的工作。VS将为您完成请求的连线。@CalebB我无法发布任何代码。我第三段的意思是,我进入Form.Designer.cs文件,将对象类型从ToolStrip更改为ParentToolStrip,当我打开VS Designer时,更改会立即反转。ParentToolStrip目前是一个存根类,它只有“class ParentToolStrip:ToolStrip”和winproc消息的重写。@Oliver我没有创建任何自定义控件,希望在这个阶段避免这样做(可能是一开始就应该做的,但不是这样)。我将visual studio工具箱中的所有toolstrip、按钮等都添加到表单中。更改.cs文件后是否重新生成了解决方案?对.cs文件进行更改不会更改运行的.exe文件,除非重建/重新编译为.exe文件。谢谢,这正是我想要的。你能告诉我什么代码可能会干扰设计器吗?我不熟悉“设计模式”(这是我的第一个主要C#项目)。我知道我可以查一下,但我希望能有一个更清晰、更简洁的概述,就像你上面所说的,而不是一堆阅读材料。再次感谢!WinForms设计器可能会执行属性gettes和setter。在WinForms designer中工作时,您处于设计模式。当你运行你的程序时,你不是。