【问题标题】:C#: Activate a TextBox when user starts typingC#:当用户开始输入时激活一个文本框
【发布时间】:2010-10-08 12:57:14
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# winforms controls keyboard focus


    【解决方案1】:

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

    【讨论】:

    • 但是这对非 ascii 字母和东西有什么作用呢?特别是考虑使用各种修饰键等......
    【解决方案2】:

    作为 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 时会发生什么,最好也跟进这个问题。

    【讨论】:

    • += 似乎有效。尽管该属性称为文本,而不是值。所以你可以在你的例子中解决这个问题:)
    • 另外,我必须在最后添加 searchTextBox.SelectionStart = searchTextBox.Text.Length,因为当我 Focus() 时它会选择所有文本。因此,当用户继续输入时,一切都会消失.. :p 除此之外,这完全有效:)
    • SelectionStart 行必须是最后一行才能正常工作 =)
    • 既然你提到了它...修正了我的答案(再次)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多