我正在开发 WinForms .NET 应用程序。我有几个用于不同地方的上下文菜单,包括一些用户控件。没有最终的根表单可以将这些菜单(我可以在那些表单的设计器中设计)放在一个地方。
我想让这些菜单成为独立控件,并能够在我需要的任何地方将它们从工具箱中删除。我知道如何在没有设计师支持的情况下以编程方式/动态方式进行。也许我只是错过了一些东西。
- 有没有办法使这些菜单可设计?
- 最佳做法是什么?
最佳答案
您可以创建可重用的自定义上下文菜单,该菜单在工具箱中可用。为此,只需在项目中创建一个继承自 System.Windows.Forms.ContextMenuStrip
的公共(public)类,并将用于创建项目的代码放在类的构造函数中即可。
您也可以使用设计器来完成:
- 向您的项目添加一个新类
CustomContextMenuStrip
- 公开并继承
System.Windows.Forms.ContextMenuStrip
并保存。 - 双击文件以在设计模式下打开它,它会显示一个空白区域和一条消息,告诉您可以添加一些组件。
- 在属性窗口中,单击
Items
属性并添加您需要的项目。 - 它将在
InitializeComponent()
方法中为项目创建代码。转到文件的代码 View 并添加一个公共(public)无参数构造函数并在其中调用InitializeComponent()
。 - 如果您构建项目,您的自定义组件将添加到工具箱顶部项目“组件”选项卡中的工具箱。
注意:
- 使用设计器方法具有使用设计器的好处,例如使用设计器,您可以通过设置仅在设计器中可用的
Language
属性使您的组件可本地化。这样您的组件本身就是可本地化的,独立于宿主形式。 - 您可以对所有可继承的组件和控件采用这种方法,并且不限于
ContextMenuStrip
。 - 您可以通过在自定义类中添加事件处理程序来向菜单项添加行为。此外,如果您需要让托管组件的表单添加事件处理程序,您可以在表单中处理
ItemClicked
。 - 虽然您可以在宿主表单设计器中看到这些项目,但您无法使用宿主表单设计器更改它们。
关于c# - 如何设计可重复使用的上下文菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36294266/