有很多关于这个问题的疑问(一个,二,三,四,五),但我尝试了它们所有的修复方法,它们要么不起作用,要么不适合我的目的。这是我的基本结构:
因为我认为这很相关,面板的停靠设置为“填充”,大小调整设置为“增长和缩小”,所以它总是覆盖整个用户控件。PictureBoxes总是覆盖部分面板,但通常不是全部(尽管可能)。
我特别听取Ctrl + C的输入,并且需要一种方法,无论哪个子元素获得焦点都能响应。我想要一种可以侦听任意按键的方法,以便稍后进行扩展。
链接页面上的答案之一建议为这些按键设置全局侦听器,但我不想这样做,因为如果它是后台应用程序,则不希望其触发。另一个建议在顶级窗体中检测它并将其过滤到我的用户控件。问题在于用户控件下正在构建DLL,我不想强制使用它的应用程序来实现对Ctrl + C的侦听,这是应该自己处理的事情。
为什么上面的链接对我不起作用
1)我没有KeyPreview属性可设置为true在我的用户控件上。该问题的第二个答案建议重写ProcessCmdKey,我已经这样做了,但是无论我尝试什么,回调都不会被调用。
2)这也建议重写ProcessCmdKey。正如我所说,它从来没有被调用过。
3)没有接受按钮可以设置为true。
4)KeyDown和PreviewKeyDown回调均已实现,但从未被调用。
5)还建议使用ProcessCmdKey。
如何在用户控件级别检测键事件而不考虑焦点?或者,如果我尝试的上述方法应该起作用,那么我错过了哪些设置阻止它起作用?
User Control
|-Panel
|-Picture Box (several of them, created at runtime, do not exist at design time)
因为我认为这很相关,面板的停靠设置为“填充”,大小调整设置为“增长和缩小”,所以它总是覆盖整个用户控件。PictureBoxes总是覆盖部分面板,但通常不是全部(尽管可能)。
我特别听取Ctrl + C的输入,并且需要一种方法,无论哪个子元素获得焦点都能响应。我想要一种可以侦听任意按键的方法,以便稍后进行扩展。
链接页面上的答案之一建议为这些按键设置全局侦听器,但我不想这样做,因为如果它是后台应用程序,则不希望其触发。另一个建议在顶级窗体中检测它并将其过滤到我的用户控件。问题在于用户控件下正在构建DLL,我不想强制使用它的应用程序来实现对Ctrl + C的侦听,这是应该自己处理的事情。
为什么上面的链接对我不起作用
1)我没有KeyPreview属性可设置为true在我的用户控件上。该问题的第二个答案建议重写ProcessCmdKey,我已经这样做了,但是无论我尝试什么,回调都不会被调用。
2)这也建议重写ProcessCmdKey。正如我所说,它从来没有被调用过。
3)没有接受按钮可以设置为true。
4)KeyDown和PreviewKeyDown回调均已实现,但从未被调用。
5)还建议使用ProcessCmdKey。
如何在用户控件级别检测键事件而不考虑焦点?或者,如果我尝试的上述方法应该起作用,那么我错过了哪些设置阻止它起作用?
Form
是一个ContainerControl
并且ContainerControl
在其ProcessCmdKey
中调用ToolStripManager.ProcessCmdKey
方法,导致处理ToolStripManager
的所有非上下文菜单条的快捷方式。 有关详细信息,请查看ContainerControl.ProcessCmdKey
的源代码。 - Reza Aghaei