【发布时间】:2016-08-16 17:20:16
【问题描述】:
对此有很多问题(one、two、three、four、five),但我尝试了所有这些问题的修复,但它们要么不起作用,要么不符合我的目的。这是我的基本结构:
User Control
|-Panel
|-Picture Box (several of them, created at runtime, do not exist at design time)
因为我认为它是相关的,所以面板将其停靠设置为“填充”并将调整大小设置为“增长和缩小”,因此它始终覆盖整个用户控件。图片框总是覆盖面板的一部分,但通常不是全部(尽管有可能)。
我专门监听Ctrl + C,我需要一种不管哪个孩子有焦点都能响应的方法。我想要一种可以监听任意按键的方法,以便稍后进行扩展。
链接页面上的一个答案建议为这些按键创建一个全局侦听器,我不想这样做,因为如果它是后台应用程序,我不希望它关闭。另一个建议在顶级表单中检测它并将其过滤到我的用户控件中。问题是向下的用户控件被构建为一个 DLL,我不想强制使用它的应用程序必须实现对Ctrl + C 的侦听,这是它应该自己处理的事情.
为什么上面的链接对我不起作用
1) 我的 UserControl 上没有要设置为 true 的 KeyPreview 属性。该问题的第二个答案建议覆盖 ProcessCmdKey,我这样做了,但无论我尝试什么,都不会调用回调。
2) 这个也建议重写 ProcessCmdKey。正如我所说,它永远不会被调用。
3) 没有让我设置为 true 的接受按钮。
4) KeyDown 和 PreviewKeyDown 回调均已实现,但从未调用过。
5) 还建议使用 ProcessCmdKey。
如何在用户控制级别检测关键事件而不考虑焦点?或者,如果我尝试的上述方法应该可以工作,我错过了哪些设置阻止它工作?
【问题讨论】:
标签: c# .net winforms user-controls