C#:用户开始输入时激活TextBox

时间:2009-02-19 08:06:50

标签: c# winforms controls keyboard focus

我想在用户开始输入内容时激活搜索文本框(即使文本框没有正确聚焦)。我已将表单上的KeyPreview设置为true。然后在KeyDown事件处理程序中,我有:

if(!searchTextBox.Focused)
{
    searchTextBox.Focus();
}

这几乎可行。文本框是聚焦的,但第一个键入的字母丢失了。我想这是因为文本框从来没有真正得到过这个事件,因为当它发生时它没有被聚焦。那么,有没有人有一个聪明的解决方案,我可以如何使这项工作像它应该的那样?

我还想了解如何只在按下常规按键时才会发生这种情况。所以不喜欢,箭头键,修改键,功能键等。但我可能会想办法。另一方面,前一个问题,我不太确定我应该如何处理...

2 个答案:

答案 0 :(得分:4)

作为SDX2000答案的补充,请查看KeyDown事件的MSDN article。它还引用了KeyPressed事件,它在KeyDown事件之后触发,我认为它更适合您想要做的事情。

引用MSDN:

  

KeyPressEventArgs指定用户按下键时组成的字符。例如,当用户按下SHIFT + K时,KeyChar属性返回一个大写的K。

private void YourEventHandler(object Sender, KeyPressEventArgs Args)
{
    if(!searchTextBox.Focused)
    {
        searchTextBox.Focus();
        searchTextBox.Text += Args.KeyChar;
        // move caret to end of text because Focus() selects all the text
        searchTextBox.SelectionStart = searchTextBox.Text.Length
    }
}

我实际上不确定您是否可以使用+=将字符串附加到字符串,因此您需要检查它。我不知道当用户点击return时会发生什么,更好地跟进该问题。

答案 1 :(得分:3)

作为KeyDown事件的一部分,您将获得第一个击键。您可以自己将其保存到文本框中。