C#:当用户开始键入时激活文本框

C#:当用户开始键入时激活文本框,c#,winforms,controls,keyboard,focus,C#,Winforms,Controls,Keyboard,Focus,我想在用户开始键入内容时激活搜索文本框(即使此时文本框没有聚焦)。我已经将表单上的KeyPreview设置为true。然后在KeyDown事件处理程序中,我有: if(!searchTextBox.Focused) { searchTextBox.Focus(); } 这几乎奏效了。文本框已聚焦,但第一个键入的字母丢失。我猜这是因为文本框从未真正了解事件,因为它发生时没有聚焦。那么,有没有人能想出一个聪明的办法来解决我如何能让这一切正常运转的问题呢 我还想了解一些技巧,如何使这只发生在

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

if(!searchTextBox.Focused)
{
    searchTextBox.Focus();
}
这几乎奏效了。文本框已聚焦,但第一个键入的字母丢失。我猜这是因为文本框从未真正了解事件,因为它发生时没有聚焦。那么,有没有人能想出一个聪明的办法来解决我如何能让这一切正常运转的问题呢


我还想了解一些技巧,如何使这只发生在按常规键时。所以不像,箭头键,修改键,功能键,等等,但我可能会想出一个办法。另一方面,上一个问题,我不太确定我应该如何处理…

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

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

作为SDX2000答案的补充,请查看KeyDown事件的。它还指的是在按键事件之后触发的事件,我认为它更适合您想要做的事情

引用MSDN:

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


实际上,我不确定是否可以使用
+=
将字符附加到字符串中,因此需要对此进行检查。我不知道当用户点击返回时会发生什么,最好也跟进这个问题。

作为SDX2000答案的补充,请查看按键事件的提示。它还指的是在按键事件之后触发的事件,我认为它更适合您想要做的事情

引用MSDN:

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


实际上,我不确定是否可以使用
+=
将字符附加到字符串中,因此需要对此进行检查。我不知道当用户点击返回时会发生什么,最好也跟进这个问题。

但是这对非ascii字母和其他东西是如何工作的?特别是考虑到各种修改键等被使用…但这是如何与非ascii字母和东西的工作?特别是考虑到使用各种修改键等…+=似乎有效。虽然该属性称为文本,但不是值。因此,您可以在您的示例中解决此问题:)此外,我必须在末尾添加searchTextBox.SelectionStart=searchTextBox.Text.Length,因为当我聚焦()时,它会选择所有文本。因此,当用户继续键入时,一切都会消失..:p除此之外,这完全有效:)SelectionStart行需要是最后一个正常工作的行=)既然您提到它。。。修正了我的答案(再次)+=似乎有效。虽然该属性称为文本,但不是值。因此,您可以在您的示例中解决此问题:)此外,我必须在末尾添加searchTextBox.SelectionStart=searchTextBox.Text.Length,因为当我聚焦()时,它会选择所有文本。因此,当用户继续键入时,一切都会消失..:p除此之外,这完全有效:)SelectionStart行需要是最后一个正常工作的行=)既然您提到它。。。修正了我的答案(再次)
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
    }
}