无法将项目添加到继承的 winform 上的 ContextMenuStrip

cannot add items to ContextMenuStrip on inherited winform

我的设置很简单。
我有一个名为 FormBaseList 的窗体,在该窗体上有一个 DataGridView 和一个 ContextMenuStrip。 ContextMenuStrip 耦合到 DataGridView 并具有 2 个菜单项。

现在我向我的项目添加一个新表单,使用添加 Windows 表单,然后我选择 "Windows Forms" / "Inherited Form"。作为基础,我选择我的 FormBaseList。

现在我有了一个新的表单,叫做 FormSomethingList,它派生自 FormBaseList。
在可视化设计器中,我现在可以向 FormSomethingList 上的 ContextMenuStrip 添加一个额外的 MenuItem,但是如果我编译并 运行 应用程序,那么新的 MenuItem 就会消失。当我在设计器中打开 FormSomeThingList 时,新的 MenuItem 也不见了...

这是 "normal" 行为还是我的项目有问题?我怀疑是第一个,但想确认一下。如果这确实是 "normal" 行为,我如何在不在代码中全部完成的情况下解决它。

您甚至不必 运行 申请。如果你只是重建,你会看到菜单选项不见了。对于每个构建,您都在告诉 Form2 它 表单 1,并且上下文菜单设置为它是什么。事实上,请注意在表单 2 中,上下文菜单的属性是不可编辑的。遗憾的是,GUI 允许您为上下文菜单键入其他值,但如果您尝试通过更改 "Items" 集合 属性 来更改此设置,请在 属性 window ,你将无法做到。

您只需要以编程方式添加该项目。但这没什么大不了的。当您在表单 2 中添加菜单项时,重建后,它从上下文菜单中消失,但它仍然存在。查看设计器代码,您会看到它。菜单项仍定义为表单 2 的一部分,但它只是与上下文菜单断开连接。所以在form2的加载事件中,你可以直接读取它。

contextMenuStrip1.Items.Add(myAddedMenuStripItem);

在 designer.cs 中查看您添加到上下文菜单的项目的名称。