c# - 再次单击 TextBox 使其散焦

标签 c# winforms textbox focus

我正在制作一个设置表单,用户可以在其中为应用程序分配自定义热键。有一个 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/

相关文章:

javascript - JQuery 脚本已被浏览器停止

.NET:如何让 Escape 关闭 MessageBox.Show()?

C# 如何在 winforms 应用程序中隐藏光标?

c# - 有没有办法使用 WebClient 从受密码保护的位置而不是 Httprequest 获取登录 cookie?

c# - 实际有效的 Url 路径编码?

c# - 想要使用带有进度报告的任务并行库来更新数据库

c# - 如何动态更改 C# 组合框或文本框中的自动完成条目?

c# - 在 C# 中开始新行时,如何在 TextBox 中创建新行?

c# - 我应该把我的存储库放在哪一层?

c# - 派生类中属性变化的基类感知