【问题标题】:Is it possible to obtain and modify standard system context menu for textbox?是否可以获取和修改文本框的标准系统上下文菜单?
【发布时间】:2011-05-16 14:34:21
【问题描述】:

我有一个带有文本框的简单 winform 应用程序。
我没有为文本字段分配任何上下文菜单,并且“它使用”标准菜单。我希望在文本框的标准上下文菜单中添加一些新项目。但我无法获得它进行修改,如果更清楚我不知道如何获得 HMENU 本机对象。
我的文本框的ContextMenu 属性等于null 所以我认为菜单出现在文本框默认windProc 路由中。有没有办法获取默认上下文菜单或获取它的副本?

提前致谢!

【问题讨论】:

  • 我没有找到解决方案,并使用了模拟系统菜单操作的自定义菜单。
  • @Viacheslav Smityukh:我有相同的解决方案,但我希望存在理想的解决方案
  • 这个问题其实有解决办法:stackoverflow.com/a/23580255/592835

标签: c# winforms winapi


【解决方案1】:

根据您使用的任何插件,创建一个派生自 TextBox 并定义“默认”上下文菜单的自定义控件可能更容易,也更容易理解。然后,将解决方案中的所有 TextBox 更改为您的自定义控件。如果做不到这一点,如果您有一个共同的窗口祖先,请设置一些初始化代码,将给定的 ContextMenu 分配给窗体的 TextBox 类型层次结构中的所有控件。您无需插入低级别的 Windows 挂钩,而是使用框架为您提供的功能来完成相同的目的,并且您的后代不必知道 Windows 如何在消息传递级别处理上下文菜单以更改这种行为。

【讨论】:

  • 感谢您的回答!提供的解决方案非常好,但我希望修改系统菜单,因为我希望菜单依赖于系统。 WinXP和Win7有不同的默认文本框上下文菜单已经不是什么秘密了,所以在系统修改的情况下我不会打破用户对默认菜单的期望,但这当然不是关键,我更倾向于制作自定义菜单而不是修改系统一。但是目前我仍然非常希望能够轻松修改系统菜单。
  • 好吧,我的希望破灭了。我现在正在创建自定义菜单。再次感谢您的建议!
猜你喜欢
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多