c# - 如何设计可重复使用的上下文菜单?

标签 c# .net winforms visual-studio windows-forms-designer

我正在开发 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/

相关文章:

c# - 如何使用 MTOM 将 vb6 中带有图像附件的 soap 发送到 c# 中的 Web 服务?

.net - 以编程方式创建 Excel 实例并加载所有加载项

.net - System.Transactions.Diagnostics.DiagnosticTrace 抛出 TypeInitializationException

c# - 设计者未保存基类的属性值

c# - 处理点击ListView的子项

c# - CultureInfo.CurrentCulture 在运行时不会改变

c# - 只读字段可以公开吗?

c# - 如何定义具有两种通用类型和两种类型约束的方法?

c# - 有一个与类(class)同名的成员是不是不好的风格?

c# - TextFormatFlags 枚举中的 EndEllipsis 和 WordEllipsis 有什么区别?