2011-07-14 87 views
3

可以说我有FormChild继承FormParent。在父母的顶端有一个工具。我想要的是在我的子表单中添加额外的元素,但控件始终被锁定,尽管我已将修改器设置为保护WinForms ToolStrip在视觉继承中不可用

我查了一下互联网,看来这是一个众所周知的bug;但没有人知道解决方法或什么?

+0

你在哪里看到这个列为“已知的错误”?你在说[这个错误报告](https://connect.microsoft.com/VisualStudio/feedback/details/114535/visual-inheritance-is-not-supported-by-some-new-controls)吗?解决方案是以编程方式进行修改,而不是通过Designer。似乎很简单;将您的代码添加到派生窗体的构造函数中。 –

+0

是的,这是确切的错误,但我只是想知道如果任何人有Visual Studio设计器的解决方案?我知道我可以通过编程方式访问toolstip –

+1

我不这么认为。正如Connect页面所示,您需要为ToolStrip编写您自己的定制设计器(几乎不推荐;这是踩入一些非法文档的水域),或者只是以编程方式进行更改。不过,我不确定用代码做这件事有什么缺点。设计师的目的是为开发者提供帮助,但是我发现有太多的人在开始困惑时犹豫不决。 –

回答

-1

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

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

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

请注意,上面的代码语法可能是错误的,我知道该控件的名称是不再那么只是ToolStrip的,我只是作为演示向您展示的概念。

+0

您能否扩展一下这应该如何解决问题?我的工具栏是在父级中声明的,由设计人员操纵。当子窗体继承父窗体时,它也得到这个工具窗体控件;但问题出现在VS设计器中,它不允许在形式继承场景中更改工具条(对于所有其他控件,因为我知道它工作正常)。 –

+0

您的子表单如何继承父级。你可以粘贴代码,所以我可以看到请。 – Jethro

3

那么你可以手动编辑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中的继承工具栏。

你应该能够在设计器中设计控制。尝试了一下 - 看起来像是有效的。

P.s. Iam使用VS2010,.NET v4

+0

但设计师会覆盖更改,对吧? –

+0

问题不在于以编程方式操纵工具条 –

+3

是的,设计师将覆盖这些更改。您应该*永远不要手动编辑'Designer.cs'文件。 –

0

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

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

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

+1

欢迎来到Stack Overflow!感谢您发布您的答案!请务必仔细阅读[自助推广常见问题](http://stackoverflow.com/faq#promotion),仅供参考。 –