【发布时间】:2017-01-26 00:02:39
【问题描述】:
我相信之前有人问过与此类似的问题,但没有一个解决方案对我有用。我有一些代码需要在同时按下 CTRL 按钮和“+”按钮时运行。我确保在父论坛上将 KeyPreview 字段设置为 true。我已经尝试将以下事件处理程序放在控件的类中,但到目前为止没有一个对我有用。当我按任意键时,事件不会被捕获:
private void PreviewControl_OnKeyDown(object sender, KeyEventArgs e){}
protected override OnKeyDown(KeyEventArgs e){}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData){}
【问题讨论】:
-
您的控件只有在包含焦点时才会收到按键事件。如果您想在没有焦点的情况下使用用户控件捕获快捷键,可以使用this trick。
-
如果您的控件类似于
PictureBox,并且您希望使其可选择然后处理关键事件,请使其可选择this(Preferred) 或this。 -
我尝试实现(首选)一个,但我仍然遇到同样的问题。我一定是做错了什么,但我不知道是什么。
-
我的控件鼠标事件工作正常(例如:protected override void OnMouseWheel(MouseEventArgs e){})。我确认当我进入这个事件处理程序时,this.ContainsFocus == true,这应该意味着控件有焦点。所以我认为问题必须不仅仅是关注控制。
标签: c# winforms event-handling controls keydown