【发布时间】:2012-09-05 11:29:45
【问题描述】:
我目前有一个 C# winforms 应用程序,在编辑主菜单上绑定了 Ctrl+C 和 Ctrl+V 作为键盘快捷键。在响应这些菜单项的代码中有一些自定义复制/粘贴行为,例如在列表视图中复制和粘贴行。
但是,我的问题是您可以在一行内编辑文本,当您这样做时,我希望 Ctrl+C 和 Ctrl+V 不会触发编辑菜单命令,而应该默认为基于普通文本的复制/粘贴。
我尝试过的一件事是触发 BeforeLabelEdit 和 AfterLabelEdit 事件,并从那里手动禁用/重新启用菜单项。不幸的是,禁用菜单项上的键盘快捷键似乎仍会触发 menu_Popup 事件,该事件当前用于决定应启用/禁用哪些菜单项。 (例如,“粘贴”仅在剪贴板上有文本时才有效)。所以即使我禁用了菜单项,键盘快捷键仍然会激活 Popup 事件,这将重新启用菜单项。 (这是一个错误吗?)
如果不手动存储旧快捷方式,将快捷方式设置为空,然后在需要重新启用时将其复制回来(感觉很脏),我找不到任何临时禁用菜单项键盘快捷方式的方法。
肯定会覆盖复制/粘贴行为或添加到它,是一件常见的事情吗?这里有更好的模式吗?
【问题讨论】:
-
过度复制粘贴对我来说是个坏主意。我习惯了
copy/paste它在所有应用程序上总是一样的。你的应用程序只会让我感到困惑。但如果你坚持,为什么不检查焦点?如果焦点在您的文本框上,则复制粘贴一个,如果没有,则复制另一个 -
我们的自定义复制/粘贴行为仅在您不编辑文本时处理复制和粘贴行。当您编辑文本时,我想要默认的复制/粘贴行为。
-
清除菜单的快捷键是最简单的方法。其他选择将是“更脏”。
标签: c# winforms events copy-paste