Как получить текущий текст после каждого нажатия клавиши в текстовом поле Winforms? - PullRequest
1 голос
/ 21 января 2012

Я пытаюсь отфильтровать список элементов в ListView, когда пользователь вводит в TextBox, и я использую события KeyDown и KeyPress, но когда я читаю textbox.Text, он всегда возвращаеттекст перед последним нажатием клавиши.Есть ли способ всегда получать то, что показано в TextBox, не нажимая Enter?

Ответы [ 6 ]

7 голосов
/ 21 января 2012

Используйте событие TextBox.TextChanged (унаследовано от Control).

Происходит при изменении значения свойства Text.

Мой совет: постарайтесь не взламывать это с помощью ключевых событий (вниз / нажатие / вверх) - есть другие способы изменить текст текстового поля, например, вставить текст из контекстного меню, вызываемого правой кнопкой мыши. Это не связано с нажатием клавиши.

2 голосов
/ 21 января 2012

Вы можете использовать событие TextChanged рассматриваемого TextBox.Я думаю, что KeyUp событие также может сработать.

1 голос
/ 03 июля 2018

Предыдущие ответы являются неполными в отношении фактического исходного вопроса: как извлечь содержимое свойства Text, когда пользователь только что нажал клавишу (включая нажатие этой клавиши)?

Событие KeyUp срабатывает ПОСЛЕ содержимое свойства Text действительно изменяется, поэтому, используя этот конкретный порядок событий, вы можете получить последнее значение текстового содержимого, просто KeyUp обработчик событий.

Событие KeyPress не работает, потому что оно срабатывает ДО изменения свойства Text.

1 голос
/ 21 января 2012

Используйте свойство KeyPressEventArgs.KeyChar .

0 голосов
/ 02 октября 2017

Вы можете попробовать с KeyPress событие:

int position = textBox1.SelectionStart;
string changedText = textBox1.Text.Insert(position, e.KeyChar.ToString());
0 голосов
/ 03 марта 2017
 public static string NextControlValue(string originalValue, int selectStart, int selectLength, string keyChar)
    {
        if (originalValue.Length > selectStart)
        {
            if (selectLength > 0)
            {
                originalValue = originalValue.Remove(selectStart, selectLength);
                return NextControlValue(originalValue, selectStart, 0, keyChar);
            }
            else
            {
                return originalValue.Insert(selectStart, keyChar);
            }
        }
        else
        {
            return originalValue + keyChar;
        }

    }

var previewValue = NextControlValue(textbox.Text, textbox.SelectionStart, textbox.SelectionLength, e.KeyChar + "");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...