2013-04-11 97 views
1

我有一个问题,设计师不会将继承ContextMenuStrip添加到components。下面是如何重现问题:设计器和继承ContextMenuStrip

  1. 创建新项目(Windows窗体应用程序)。
  2. 通过设计师添加到窗体ContextMenuStrip,就会产生这样的:

    private void InitializeComponent() 
    { 
        this.components = new System.ComponentModel.Container(); 
        this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); 
        ... 
    } 
    
  3. 创建MyContextMenuStrip类:

    public class MyContextMenuStrip : ContextMenuStrip 
    { 
    } 
    
  4. 编译并通过设计添加到窗体MyContextMenuStrip,就会产生此:

    private void InitializeComponent() 
    { 
        this.components = new System.ComponentModel.Container(); 
        this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); 
        this.myContextMenuStrip1 = new WindowsFormsApplication1.MyContextMenuStrip(); 
        ... 
    } 
    

WTF?为什么它不会将MyContextMenuStrip添加到组件中?

而我需要菜单出现在components为我的本地化经理(自动翻译菜单)。我是否忘记了一些属性,接口或重写?

回答

1

Visual Studio没有使用Container初始化您的MyContextMenuStrip,因为您的控件没有接受Container作为参数的构造函数。

创建您MyContextMenuStrip一个构造函数一个System.ComponentModel.IContainer,然后使用base关键字传递此参数到您的控件的基类:

class MyContextMenuStrip : ContextMenuStrip 
{ 
    public MyContextMenuStrip(System.ComponentModel.IContainer c) : base(c) { } 
} 

这样做了以后,你会发现,当你把你的MyContextMenuStrip到使用设计形式,VS会产生在你的窗体的InitializeComponent方法,你想要的代码:

this.myContextMenuStrip1 = new WindowsFormsApplication1.MyContextMenuStrip(this.components); 
+0

谢谢,已经就要另一种方式(枚举和控制检查他们的'Control.ContextMenuStrip'),但它不能很好地工作(如果'MyContextMenuStrip'没有被分配给任何一个控件,并且假设以编程方式显示 - 那么我找不到它)..然后你来了这里= D – Sinatr 2013-04-11 08:49:17

+0

@Sinatr谢谢你,我学到了一些东西,你的问题已经很好地解决了。 – 2013-04-11 15:04:19