WinForms工具条在视觉继承中不可用

本文关键字:继承 视觉 工具 WinForms | 更新日期: 2023-09-27 18:01:58

假设我有一个继承FormParent的FormChild。在parent中,顶部有一个工具提示。我想要的是在我的子窗体中添加额外的元素,但是控件总是被锁定,尽管我已经将修饰符设置为protected

我在网上查过了,似乎这是一个众所周知的bug;但有人知道解决办法吗?

WinForms工具条在视觉继承中不可用

你可以手动编辑FormChild.Designer.cs文件。在那里你可以访问继承的工具条。

编辑:

  1. 添加这个类:

    //System.Design.dll required
    [Designer(typeof(System.Windows.Forms.Design.ControlDesigner))]
    public class InheritableToolStrip : ToolStrip { }
    
  2. 编译项目

  3. 从工具箱中使用InheritableToolStrip添加到FormParent。
  4. 将Modifier属性更改为protected
  5. 在FormChild中添加继承的工具条。

,您应该能够在设计器中设计控件。试了一下,好像有用。

注。我使用VS2010, .NET v4

Microsoft已经锁定了复杂控件的视觉继承,因为他们无法找出如何以一种简单的方式管理继承树上子项控件的设计器序列化。

一个简单的解决方法(实现相同的效果)是在子表单上放置一个不可见的工具带,并在加载时将其与基本表单工具带合并。

我已经开发了MergableToolStrip控件,你可以在这里免费使用

您可以像这样将工具栏传递给子表单。

public partial class ChildForm : Form
{ 
    private readonly ToolStrip parentToolStrip;
    public ChildForm(ToolStrip strip)
    {
        parentToolStrip = strip;
    }
}

请注意,上面的代码语法可能是错误的,我知道控件名称比只是ToolStrip长,我只是用作演示,向您展示的概念。