1

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

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

这几乎可以工作。文本框已聚焦,但第一个键入的字母丢失了。我想这是因为文本框从来没有真正得到事件,因为它发生时没有集中注意力。那么,有没有人有一个聪明的解决方案来让我像它应该的那样工作?

我还想要一些提示,说明如何仅在按下常规键时才发生这种情况。所以不像箭头键、修饰键、功能键等。但这我可能会想办法去做。另一方面,上一个问题,我不太确定我应该如何解决......

4

2 回答 2

4

作为对 SDX2000 答案的补充,请查看 KeyDown 事件的MSDN 文章。它也指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,最好也跟进该问题。

于 2009-02-19T08:22:29.980 回答
3

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

于 2009-02-19T08:09:12.553 回答