我遇到了问题,设计师没有将继承的ContextMenuStrip
添加到components
。以下是重现问题的方法:
通过设计师添加到表单ContextMenuStrip
,它将生成:
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
...
}
创建MyContextMenuStrip
类:
public class MyContextMenuStrip : ContextMenuStrip
{
}
通过设计师编译并添加到表单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
中为我的本地化经理提供菜单(自动翻译菜单)。我忘了一些属性,界面或覆盖??
答案 0 :(得分:1)
Visual Studio未使用MyContextMenuStrip
初始化您的Container
,因为您的控件没有接受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);