Все элементы управления предлагают какое-то событие, указывающее на то, что значение было изменено. Например, когда вы вводите текстовое поле и начинаете вводить текст с каждым нажатием клавиши, происходит событие TextChanged
. При открытии выпадающего списка и выборе нового элемента в раскрывающемся списке вы получаете событие SelectedIndexChanged
.Значение определения элемента управления .NET изменилось и завершилось
Проблема в том, что во многих случаях события изменения сигнализируют о серии изменений, которые представляют собой некоторое промежуточное, незавершенное состояние. например Когда пользователь вводит свой почтовый индекс, нет причин искать город и состояние или даже пытаться проверить его до тех пор, пока пользователь не закончит печатать. Когда пользователь сосредоточится на комбинированном методе доставки и нажимает клавиши вверх/вниз для перехода по значениям комбо, поскольку он пытается найти тот, который ему нужен, нет оснований предполагать, что метод доставки указан и, таким образом, применил его к выставленный счет. Возможно, имеет смысл подождать, пока он не выйдет из выпадающего списка после пейджинга через значения, чтобы сигнализировать о выборе метода доставки. Мы не хотим, чтобы нас беспокоила серия промежуточных состояний.
В нашем магазине мы внедрили событие Finalized
, которое запускается только тогда, когда пользователь начинает выполнять ручную смену (в отличие от программных изменений, таких как установка почтового индекса из БД), а затем завершается. Это событие Finalized
пришлось обрабатывать по-разному для разных элементов управления; Я не знаю никаких функций .NET, которые облегчили бы это.
Единственная идея, которую я имею сейчас, - попытаться использовать что-то вроде Rx (функциональное реактивное программирование), чтобы это учесть. Любая идея для простого подхода .NET, который бы облегчил это?
Вы только точно знаете, что пользователь выполнил ввод, когда он сменил фокус на другой элемент управления. Например, введите текст в другое поле или нажмите кнопку «ОК». Таким образом, вас интересует событие «Оставь». Событие Validating специально предназначено для этого. –
Это действительно зависит от приложения. Карты Google красиво предоставляют раскрывающийся список, элементы которого фильтруются с каждым нажатием клавиши. Я также использовал таймер, который сбрасывается с каждым нажатием клавиши и, достигая некоторого количества секунд, запускает событие, вызвавшее запрос базы данных. – djv
Проверка работоспособности. Однако это вводящее в заблуждение имя. То, как мы его используем, не имеет ничего общего с валидацией. Мы просто ждем завершения взаимодействия пользователя, прежде чем делать что-то динамическое с его вводом. – Mario