我正在制作一个设置表单,用户可以为应用程序分配自定义热键。有一个文本框,通过鼠标点击它,它会聚焦并等待一个按键,然后失去焦点(通过聚焦另一个标签):
private void txtKey_KeyDown(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = true;
}
private void txtKey_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
TextBox textBox = (TextBox)sender;
textBox.Text = e.KeyCode.ToString();
label1.Focus();
}
有没有办法通过再次用鼠标单击它或者点击其周围的GroupBox来取消键盘输入过程从而使已经获得焦点的TextBox失去焦点?我无法判断在单击时TextBox是否已经获得了焦点(因为在测试之前,单击操作会使其获得焦点)。当然我可以在TextBox旁边添加一个“取消”按钮,但这不是我想要的。GroupBox没有Click事件,所以我不能通过单击其周围的GroupBox来使TextBox失去焦点,或者有什么其他办法吗?
GroupBox
中使用Panel
控件,因为Panel
有MouseClick
事件。 - sallushanEsc
或Enter
(就像我经常做的那样)来关闭或应用并关闭对话框。这样做将会将该键注册为热键。当然,用户始终可以单击“取消”以在不保存的情况下关闭对话框,但通过再次单击文本字段来取消分配过程会感觉更加“专业”。至于我的答案,我有一个可行的解决方案。(添加了一张图片来展示对话框的一部分,活动文本框的颜色不同且正在等待按键输入。http://www.saunalahti.fi/arka80/web/hotkey.png) - darx