Какой наилучший способ / событие использовать при тестировании, если текстовое поле завершило изменение текста? - PullRequest
2 голосов
/ 15 марта 2010

с использованием winforms, c #, против 2008

Итак, у меня есть текстовые поля1, текстовые поля2 и текстовые поля3 на winforms.

Textbox3.text = textbox1.text + textbox2.text.

Мне нужно, чтобы textbox3 обновлялся всякий раз, когда содержимое textbox1 и textbox2 изменялось вручную или программно.

Проблема в том, что если я использую текстовое событие textbox, оно продолжает работать как один из типов в текстовом поле. Мне нужен способ вызова моего метода для заполнения textbox3 после того, как tb1 или tb2 были ЗАВЕРШЕНЫ, изменяя программно или через ввод ключа, и не запускаются каждый раз при вводе буквы текста.

Как я могу обновить TextBox3, только когда на tb1 или tb2 закончено меняется?

Ответы [ 4 ]

7 голосов
/ 15 марта 2010

Это немного зависит от того, что вы подразумеваете под закончено .

Наиболее распространенным выбором является запуск события, когда фокус покидает элемент управления. Это событие Control.Leave или Control.LostFocus . Это также события, которые используются для проверки - проверка нового значения (Validated и Validating события) происходит при изменении фокуса.

Если вы пытаетесь сделать что-то вроде прогрессивного поиска, когда вам нужно реагировать, пока элемент управления находится в фокусе, но не реагировать на каждое нажатие клавиши, тогда другое решение - использовать таймер компонента, и перезапускайте таймер каждый раз, когда происходит событие TextChanged. Таким образом, ваш код обновления будет запущен только после того, как пользователь изменит текст , а ничего не наберет, скажем, в течение 1 секунды.

0 голосов
/ 13 сентября 2012

Ответ заключается в использовании события KeyPressUp. Это событие вызывается после добавления или удаления символа из текстового поля. Таким образом, вы можете проверить длину текста текстового поля и установить включенные или видимые атрибуты на основе длины текста.

0 голосов
/ 15 мая 2012

Существует несколько методов, которые вы можете использовать: Leave событие или ручное событие "остановка ввода".

Событие Leave, как правило, подходит для обработки пользовательского ввода (например, для проверки), когда они переходят в другую часть формы. Просто убедитесь, что событие запускается, если они переходят из текстового поля в любой другой элемент пользовательского интерфейса в вашей форме - возможно, вам придется сосредоточиться на новом элементе.

Событие TypingStopped - это то, что вам нужно создать самостоятельно, но его основная идея - это короткий таймер (скажем, 500 мс, но вам нужно его протестировать), который вы запускаете при каждом событии KeyDown Текстовое окно. Таймер будет запускать свое собственное событие и отключаться, если он достигнет конца своего тайм-аута.

0 голосов
/ 16 августа 2010

Я не совсем уверен, что это то, что вам нужно, но элемент управления редактора DevExpress предоставляет буферизованную опцию, которая запускает событие изменения после того, как пользователь заканчивает вводить текст (вместо каждого нажатия клавиши) ... это в основном то, чтоAaronaught предлагает с компонентом таймера ...

http://documentation.devexpress.com/#WindowsForms/DevExpressXtraEditorsRepositoryRepositoryItem_EditValueChangedFiringModetopic

...