1

我有一个问题,设计师没有将继承添加ContextMenuStripcomponents. 以下是重现问题的方法:

  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();
        ...
    }
    

怎么回事?为什么它不添加MyContextMenuStrip到组件中???

我需要components为我的本地化管理器提供菜单(以自动翻译菜单)。我是否忘记了某些属性、接口或覆盖?

4

1 回答 1

1

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

在您的构造函数中创建一个MyContextMenuStrip接受 a的构造函数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);
于 2013-04-11T06:58:37.427 回答