我目前有一个C#winforms应用程序,Ctrl + C和Ctrl + V绑定为编辑主菜单上的键盘快捷键。代码中有一些自定义复制/粘贴行为,它们响应这些菜单项,例如复制和粘贴listviews中的行。
但是,我的问题是你可以编辑一行内的文本,当你这样做时,我希望Ctrl + C和Ctrl + V不会触发编辑菜单命令,而应该默认为基于普通文本的复制/糊。
我尝试过的一件事是触发BeforeLabelEdit和AfterLabelEdit事件,并从那里手动禁用/重新启用菜单项。不幸的是,似乎禁用的菜单项上的键盘快捷键仍会触发menu_Popup事件,该事件当前用于决定应启用/禁用哪些菜单项。 (例如,“粘贴”仅在剪贴板上有文本时才有效)。因此,即使禁用菜单项,键盘快捷键仍将激活Popup事件,这将重新启用菜单项。 (这是一个错误吗?)
我找不到任何暂时禁用菜单项键盘快捷方式的方法,而无需手动存储旧快捷方式,将快捷方式设置为null,然后在需要重新启用时将其复制回来(感觉很脏)。
当然要覆盖复制/粘贴行为或添加它,这是常见的事情吗?这里有更好的模式吗?