我有一个C# winform,上面有一个按钮。
现在,当我运行我的应用程序时,按钮自动获得焦点。
问题是我的窗体的KeyPress事件不工作,因为按钮被聚焦了。
我在FormLoad()事件上尝试了this.Focus();,但KeyPress事件仍然不起作用。
发布于 2011-03-31 20:09:29
您需要覆盖表单的 method。这是当子控件具有键盘焦点时,通知您发生按键事件的唯一方式。
示例代码:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
// look for the expected key
if (keyData == Keys.A)
{
// take some action
MessageBox.Show("The A key was pressed");
// eat the message to prevent it from being passed on
return true;
// (alternatively, return FALSE to allow the key event to be passed on)
}
// call the base class to handle other key events
return base.ProcessCmdKey(ref msg, keyData);
}至于为什么this.Focus()不能工作,这是因为表单本身不能拥有焦点。特定控件必须具有焦点,因此当您将焦点设置到窗体时,它实际上会将焦点设置到第一个可以接受TabIndex值最低的焦点的控件。在本例中,这是您的按钮。
发布于 2011-03-31 20:01:15
尝试将窗体的KeyPreview属性设置为True。
发布于 2012-06-07 12:03:11
在主窗体上设置keyPreview = true
https://stackoverflow.com/questions/5499463
复制相似问题