Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.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
C# Ctrl+;由于全局快捷方式,文本框上的C不起作用_C#_.net_Winforms - Fatal编程技术网

C# Ctrl+;由于全局快捷方式,文本框上的C不起作用

C# Ctrl+;由于全局快捷方式,文本框上的C不起作用,c#,.net,winforms,C#,.net,Winforms,我创建了一个数字文本框,并希望实现自定义复制/粘贴功能 当覆盖ProcessCmdKey时,不会收到OnKeyDown或OnKeyPress Ctrl+C,因为应用程序中存在使用相同组合定义的快捷方式 接收到其他组合,如Ctrl+U或其他组合 这可能吗?如何操作?在这种情况下,您应该覆盖控件。在PreviewKeyDown上,在按住Ctrl+C的情况下,设置PreviewKeyDownEventArgs.IsInputKey为true。执行此操作将导致调用Control.OnKeyDown,尽管

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

当覆盖ProcessCmdKey时,不会收到OnKeyDown或OnKeyPress Ctrl+C,因为应用程序中存在使用相同组合定义的快捷方式

接收到其他组合,如Ctrl+U或其他组合

这可能吗?如何操作?

在这种情况下,您应该覆盖
控件。在PreviewKeyDown
上,在按住Ctrl+C的情况下,设置
PreviewKeyDownEventArgs.IsInputKey
true
。执行此操作将导致调用
Control.OnKeyDown
,尽管此组合键有一个全局快捷方式


更新:由于我的解决方案对您不起作用,第三方库显然实现了一个可在消息级别处理快捷方式的。您可以尝试添加另一个消息过滤器,并在那里进行自定义处理,但这将变得很糟糕…

在控件上将ShortcutsEnabled设置为false。请参阅。

正如Florian所指出的,消息不知何故在控件内部被吃掉了,由于您无法直接访问它,因此您必须变得聪明

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


但是,如果您试图自己捕获ctrl+C并使用它做一些事情,那么这可能是您想要避免的一种方法。用户不会期望在遇到快捷方式时发生两件事,他们会追上你。当然,我不知道你的应用程序是怎么做的,也不知道你的应用程序是怎么做的,所以这只是一个猜测。

对我来说,删掉的答案很有效。实际上,我自己找到了解决方案并实现了它,但没有进行编译以进行测试,并决定寻求帮助,因为IsInputKey是一个非常奇怪的名称,可以说您希望捕获该键。

这些其他“快捷方式”是如何实现的?这在你的问题中起了很大的作用。我真的不能说。这是一个第三方GUI库这对我不起作用。OnPreviewKeyDown不是为Control+C调用的。但是为便于解释,它是为Ctrl+MThanks调用的。我不认为我会这样做,但知道这一点仍然很好。菜单Ctrl+C为应用程序相关的任务打开一个自定义复制对话框。当然,每个用户都希望文本框上的Ctrl+C可以复制所选文本。我不认为有人会因为我这样做而追杀我:)。我的问题是,即使存在全局快捷方式,我是否能捕捉到该快捷方式。我相信在您的情况下,您没有绑定到Ctrl+C的全局快捷方式,因此在您的情况下会调用OnPreviewKeyDown。。。