【问题标题】:WinForms ToolStrip not available in visual inheritenceWinForms ToolStrip 在视觉继承中不可用
【发布时间】:2011-10-05 02:34:32
【问题描述】:

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

我上网查了一下,似乎这是一个众所周知的错误;但是有人知道解决方法吗?

【问题讨论】:

  • 您在哪里看到它被列为“众所周知的错误”?你在说this bug report吗?解决方案是以编程方式进行修改,而不是通过 Designer。看起来很简单;在派生表单的构造函数中添加您的代码。
  • 是的,这就是确切的错误,但我只是想知道是否有人为 Visual Studio 设计器提供解决方案?我知道我可以通过编程方式访问工具提示
  • 我不这么认为。正如 Connect 页面所示,您要么需要为 ToolStrip 编写自己的自定义设计器(几乎不推荐;这是在涉足一些非常无证的水域),或者只是以编程方式进行更改。不过,我不确定使用代码执行此操作有什么缺点。设计器旨在为开发人员提供帮助,但我看到太多人在它开始妨碍他们时不愿放弃它。
  • 您使用的是什么版本的 Visual Studio。

标签: c# winforms visual-studio toolstrip visual-inheritance


【解决方案1】:

Microsoft 已锁定复杂控件的 Visual Inheritance,因为他们无法弄清楚如何以简单的方式在继承树上管理子项控件的设计器序列化。

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

I've developed MergableToolStrip controls you can use free of charge here

【讨论】:

  • 欢迎来到 Stack Overflow!感谢您发布您的答案!请务必仔细阅读FAQ on Self-Promotion,仅供参考。
【解决方案2】:

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

编辑:

  1. 添加这个类:

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

  3. 使用工具箱中的 InheritableToolStrip 添加到 FormParent。
  4. 将修饰符属性更改为受保护。
  5. 在 FormChild 中将项目添加到继承的工具条中。

您应该能够在设计器中设计控件。尝试了一下 - 似乎它有效。

附:我正在使用 VS2010,.NET v4

【讨论】:

  • 问题不是以编程方式操作工具条
  • 是的,设计师会覆盖这些更改。您应该切勿手动编辑Designer.cs 文件。
  • 已编辑答案。希望这会有所帮助。
  • @CodyGray 不推荐,但我确实编辑了 Designer.cs 文件,通常在 #region 块内。变化反映在设计中。如果你小心,它可以提高使用设计器的生产力。 InitializeComponent() 之后在构造函数中所做的更改通常效果不佳,并且您看不到设计器中的更改。它可以破解代码(令人恐惧的为了防止可能的数据丢失...屏幕)。如果我破坏了表单(通过编辑设计器、修改基类等),我可以通过编辑 Designer.cs 文件来修复它。评论?
【解决方案3】:

您可以像这样将工具条传递给子窗体。

public partial class ChildForm : Form
{ 
    private readonly ToolStrip parentToolStrip;

    public ChildForm(ToolStrip strip)
    {
        parentToolStrip = strip;
    }
}

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

【讨论】:

  • 你能解释一下这应该如何解决这个问题吗?我的工具条在父级中声明,由设计师操作。当子窗体继承父窗体时,它也得到这个工具提示控件;但问题出在 VS 设计器中,它不允许在表单继承场景中更改工具条(对于我所知道的所有其他控件都可以正常工作)
  • 您的子窗体如何继承父窗体。你能粘贴代码让我看看吗?
猜你喜欢
  • 2011-12-10
  • 2022-11-25
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 2017-11-22
  • 2011-03-05
相关资源
最近更新 更多