.net WinForm:将ContextMenuStrip MenuItem与VS2010中的现有菜单合并
我已经向.net WinForm:将ContextMenuStrip MenuItem与VS2010中的现有菜单合并,.net,windows,winforms,menuitem,contextmenustrip,.net,Windows,Winforms,Menuitem,Contextmenustrip,我已经向ContextMenuStrip控件添加了一些自定义MenuItem对象 但是,添加我的对象完全破坏了控件中已经存在的非常有用的菜单项(TreeView、TextBox、以及DataGridView) 有人能够成功合并这些项目吗?没有,您不能合并它们。您必须通过添加适当的菜单项并在其Click事件处理程序方法中编写必要的代码来复制功能 默认情况下,常用控件提供该菜单。如果您希望覆盖它,可以这样做,但是没有内置的将自定义项与内置菜单相结合的规定。一些人利用这一特性,将空的ContextMe
ContextMenuStrip
控件添加了一些自定义MenuItem
对象
但是,添加我的对象完全破坏了控件中已经存在的非常有用的菜单项(TreeView
、TextBox
、以及DataGridView
)
有人能够成功合并这些项目吗?没有,您不能合并它们。您必须通过添加适当的菜单项并在其
Click
事件处理程序方法中编写必要的代码来复制功能
默认情况下,常用控件提供该菜单。如果您希望覆盖它,可以这样做,但是没有内置的将自定义项与内置菜单相结合的规定。一些人利用这一特性,将空的ContextMenu
或ContextMenuStrip
分配给控件,以防止显示标准菜单(谈论令人困惑的UI设计!)
特别是对于TextBox
控件,我强烈建议您保持默认上下文菜单不变,而不是尝试重新创建它。对于像IME这样的事情,它公开了很多选项,而这些选项是你自己很难做到的。如果您的应用程序面向公众,他们会非常感激您的应用程序中如预期的那样存在这样的功能
最好将自定义功能完全放在其他地方。右键单击公共控件并期望看到自定义选项列表是非常不直观的。正是由于这个原因,大多数其他应用程序不能以这种方式工作
尽管我的建议与此相反,如果您坚持要让它工作,那么您可以利用以下知识:内置上下文菜单只是一个标准的Win32弹出菜单,由所有常用控件显示,当弹出菜单即将激活时,控件会向其父控件发送一条消息 有了这些知识,您可能会决定从Windows API中p/调用一些函数并修改上下文菜单。特别是,or函数 但是,一个惊喜会等着你。原来是本机编辑控件(它是
文本框
的代表)!我不确定TreeView
控件,而DataGridView
控件不会执行任何操作,因为它是为WinForms编写的自定义类。它根本不基于任何本机Win32控件,因此它不会发送任何您可以处理的消息