C #: активировать TextBox, когда пользователь начинает печатать - PullRequest
1 голос
/ 19 февраля 2009

Я хочу активировать текстовое поле поиска, когда пользователь начинает что-то печатать (даже если текстовое поле не сфокусировано прямо сейчас). Я дошел до установки KeyPreview в форме true. Затем в обработчике событий KeyDown у меня есть это:

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

Это почти работает. Текстовое поле сфокусировано, но первая напечатанная буква потеряна. Я предполагаю, что это потому, что текстовое поле никогда не получает событие, так как оно не было сфокусировано, когда оно произошло. Итак, есть ли у кого-нибудь умное решение, как я мог бы заставить эту работу работать так, как надо?

Я также хотел бы дать несколько советов о том, как сделать это только при нажатии обычных клавиш. Так что не нравится, клавиши со стрелками, клавиши-модификаторы, функциональные клавиши и т. Д. Но я, вероятно, найду способ сделать это. С другой стороны, в предыдущем выпуске я не совсем уверен, как мне решать ...

Ответы [ 2 ]

4 голосов
/ 19 февраля 2009

В дополнение к ответу от SDX2000 посмотрите на статью MSDN для события KeyDown. Это также относится к событию 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, лучше проследите и за этой проблемой.

3 голосов
/ 19 февраля 2009

Вы получите первый ход клавиши как часть события KeyDown. Вы можете сохранить его в текстовом поле самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...