2013-12-11 4 views
3

Все элементы управления предлагают какое-то событие, указывающее на то, что значение было изменено. Например, когда вы вводите текстовое поле и начинаете вводить текст с каждым нажатием клавиши, происходит событие TextChanged. При открытии выпадающего списка и выборе нового элемента в раскрывающемся списке вы получаете событие SelectedIndexChanged.Значение определения элемента управления .NET изменилось и завершилось

Проблема в том, что во многих случаях события изменения сигнализируют о серии изменений, которые представляют собой некоторое промежуточное, незавершенное состояние. например Когда пользователь вводит свой почтовый индекс, нет причин искать город и состояние или даже пытаться проверить его до тех пор, пока пользователь не закончит печатать. Когда пользователь сосредоточится на комбинированном методе доставки и нажимает клавиши вверх/вниз для перехода по значениям комбо, поскольку он пытается найти тот, который ему нужен, нет оснований предполагать, что метод доставки указан и, таким образом, применил его к выставленный счет. Возможно, имеет смысл подождать, пока он не выйдет из выпадающего списка после пейджинга через значения, чтобы сигнализировать о выборе метода доставки. Мы не хотим, чтобы нас беспокоила серия промежуточных состояний.

В нашем магазине мы внедрили событие Finalized, которое запускается только тогда, когда пользователь начинает выполнять ручную смену (в отличие от программных изменений, таких как установка почтового индекса из БД), а затем завершается. Это событие Finalized пришлось обрабатывать по-разному для разных элементов управления; Я не знаю никаких функций .NET, которые облегчили бы это.

Единственная идея, которую я имею сейчас, - попытаться использовать что-то вроде Rx (функциональное реактивное программирование), чтобы это учесть. Любая идея для простого подхода .NET, который бы облегчил это?

+2

Вы только точно знаете, что пользователь выполнил ввод, когда он сменил фокус на другой элемент управления. Например, введите текст в другое поле или нажмите кнопку «ОК». Таким образом, вас интересует событие «Оставь». Событие Validating специально предназначено для этого. –

+0

Это действительно зависит от приложения. Карты Google красиво предоставляют раскрывающийся список, элементы которого фильтруются с каждым нажатием клавиши. Я также использовал таймер, который сбрасывается с каждым нажатием клавиши и, достигая некоторого количества секунд, запускает событие, вызвавшее запрос базы данных. – djv

+0

Проверка работоспособности. Однако это вводящее в заблуждение имя. То, как мы его используем, не имеет ничего общего с валидацией. Мы просто ждем завершения взаимодействия пользователя, прежде чем делать что-то динамическое с его вводом. – Mario

ответ

0

Validating и Validated события работают нормально; однако имена были вводящими в заблуждение, и поэтому мне никогда не приходило в голову, что они подходят.

Весь кредит Хансу Пассанту за его комментарий, который решил это для меня. (Ганс, перенаправит кредит вам, если вы ответите.)

0

Для почтового индекса текстового поля, вы можете использовать leave события (происходит, когда текстовое поле теряет фокус), или в textchanged случае вы можете использовать, если заявление:

if ziptextbox.text.length = 5 then 
    'Hooray! do stuff here 
end if 

И вы также можете просто использовать leave событие для combobox