由于全局快捷键,文本框上的Ctrl + C不起作用

本文关键字:Ctrl 不起作用 于全局 快捷键 文本 | 更新日期: 2023-09-27 17:55:00

我创建了一个数字文本框,并希望实现自定义复制/粘贴功能。

当重写ProcessCmdKey, OnKeyDown或OnKeyPress Ctrl+C未被接收,因为在应用程序中有一个快捷方式定义为相同的组合。

其他组合,如Ctrl+U或其他。

这可能吗?如何?

由于全局快捷键,文本框上的Ctrl + C不起作用

在这种情况下,您应该覆盖Control.OnPreviewKeyDown,对于按下Ctrl + C的情况,将PreviewKeyDownEventArgs.IsInputKey设置为true。这样做会导致Control.OnKeyDown被调用,尽管这个键组合有一个全局快捷键。

Update:由于我的解决方案不适合您,第三方库显然实现了IMessageFilter,这导致在消息级别处理快捷方式。您可以尝试添加另一个消息过滤器并在那里进行自定义处理,尽管如此,现在这会变得很难看…

正如Florian指出的那样,消息不知怎么地在控件内部被吃掉了,并且由于您无法直接访问它,因此您必须变得聪明。

这个库可能对你有一些用处,但是你将进入相当黑客的领域,因为你将不得不避免你的正常事件(如OnPreviewKeyDown),并使用lib中的事件。

http://www.codeproject.com/KB/cs/globalhook.aspx

但是,如果您试图自己捕获ctrl+C并使用它做一些事情,这是您可能想要避免的路线。当用户按下快捷键时,他们不会期望发生两件事,他们会跟着你。当然,我不知道你的应用是怎么做的这只是一个猜测

将控件的ShortcutsEnabled设置为false。看到TextBoxBase.ShortcutsEnabled。

对我来说,被剔除的答案效果很好。实际上,我自己找到了解决方案,并实现了它,但没有去编译测试,并决定寻求帮助,因为IsInputKey是一个非常奇怪的名字,说你想捕获键下来。