Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net WinForm:将ContextMenuStrip MenuItem与VS2010中的现有菜单合并_.net_Windows_Winforms_Menuitem_Contextmenustrip - Fatal编程技术网

.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控件,因此它不会发送任何您可以处理的消息