我正在制作一个设置表单,用户可以在其中为应用程序分配自定义热键。有一个 TextBox,通过用鼠标单击它,它会聚焦并等待一个按键,然后散焦(通过聚焦另一个标签):
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 是否已经聚焦(因为单击时,它会在我测试它是否聚焦之前得到聚焦)。当然,我可以在文本框旁边添加一个“取消”按钮,但这不是我想要的。
GroupBox 没有点击事件,所以我无法通过单击 TextBox 周围的 GroupBox 来散焦。或者我能以某种方式吗?
最佳答案
你可以设置/删除焦点
Keyboard.Focus = null;
您还可以报名参加以下事件:
public event MouseButtonEventHandler PreviewMouseLeftButtonDown
每次单击文本框时都会触发此事件,因此您可以根据需要在此处设置焦点。
Winforms 也有办法。我不精通它,但这里有一种方法: 创建一个位于窗口外的文本框(例如,名为 textBoxFocus)。例如,将其大小调整为 1、1 并将其移动到 -10、-10。然后就可以注册到Click事件,写
textBoxFocus.Focus();
有点迂回,但应该可以达到你想要的效果。
关于c# - 再次单击 TextBox 使其散焦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23833830/