Текущий архив: 2009.12.20;
Скачать: CL | DM;
Вниз
Обработка неверно введеного значения Найти похожие ветки
← →
venoel (2008-12-11 12:59) [0]Здравствуйте. Хочется услышать ваше мнения и советов по следующему вопросу.
Исходная ситуация. Есть элемент ввода. Пусть вводимое значение должно удовлетворять какому-то условию. Вопрос собственно в том, что делать, если введеное значение условию не удовлетворяет. В коллективе мнения разделились.
Мнение раз: Надо сообщать пользователю об ошибке и возвращать фокус ввода на элемент ввода (что на мой взгляд неудобно и лишает возможности воспользоваться другими элементами окна, до тех пор, пока не введешь "правильное" значение).
Мнение два: сообщать пользователю об ошибке, но позволять покинуть поле ввода (естественно с невозможностью все таки в дальнейшем записать неверное значение в БД).
Хотелось бы услышать, кто как решает данный момент.
← →
clickmaker © (2008-12-11 13:03) [1]> Надо сообщать пользователю об ошибке и возвращать фокус
> ввода на элемент ввода
но не в момент, когда он покинул именно это поле ввода, а когда нажал кнопку Ок или Применить или что там еще
Можно еще выводить что-то типа хинта с сообщением о неверности данных, указывающего на это поле ввода.
Если значение должно соответствовать каким-то определенным требованиям, лучше писать под полем ввода примечание. Типа "Логин должен состоять только из латинских букв"
← →
Юрий Зотов © (2008-12-11 13:03) [2].. что на мой взгляд удобно, так как избавляет пользователя от лишних умодвижений (какой именно контрол содержит неверное значение) и телодвижений (фокусировки этого контрола).
← →
Сергей М. © (2008-12-11 13:04) [3]imho, оба решения имеют право на жизнь.
Выбор того или иного зависит от дальнейшего хода алгоритма и от конкретных требований пользователя по удобству/функциональности интерфейса и по реализации защиты от дурака.
Можно поступить и иначе - предусмотреть польз.настройки, меняющие поведение проверочных участков алгоритма удобным для юзера образом, если это не противоречит сквозной логике..
← →
Юрий Зотов © (2008-12-11 13:10) [4]Естественно, проверка ВСЕХ значенией должна идти при нажатии OK, а не при потере фокуса каждым контролом. Помимо удобства для юзера, это еще и дает возможность проверять данные в их СОВОКУПНОСТИ.
← →
venoel (2008-12-11 13:42) [5]ну мне кажется весь диапазон возможных вариантов был перебран. Спасибо.
← →
Ega23 © (2008-12-11 13:59) [6]100% гарантию может дать только процедура проверки ВСЕХ значений после нажатия OK (но перед запуздыриванием в БД).
← →
venoel (2008-12-11 14:12) [7]не, тут вопрос не в "гарантии", а именно в "поведении" программы.
Ну качестве наглядного "не хорошего поведения программы", можно взять DateTimePicker. Если там по умолчанию стоит дата из месяца сентябрь(или февраль, апрель, июнь, ноябрь), а вам надо ввести 31.10.2008, то вам надо перевести фокус ввода на "месяц", исправить месяц с 09 на 10, потом пернуться на "дни" и тогда уж вводить "31" число.
← →
Медвежонок Пятачок © (2008-12-11 16:38) [8]юзер имеет право начать ввод документа в понедельник, а закончить в пятницу. с закрыванием формы и программы и с сохранением всех уже введенных значений в том числе если что-то не заполнено.
← →
Медвежонок Пятачок © (2008-12-11 16:39) [9]особенно если полей ввода не два-три
← →
clickmaker © (2008-12-11 16:44) [10]> [8] Медвежонок Пятачок © (11.12.08 16:38)
> юзер имеет право начать ввод документа в понедельник, а
> закончить в пятницу
это если кроме него никому этот документ нафих не нужен )
← →
Медвежонок Пятачок © (2008-12-11 16:46) [11]это если кроме него никому этот документ нафих не нужен )
чаще получается, что такая программа становится ненужной.
← →
Германн © (2008-12-12 00:30) [12]
> venoel (11.12.08 14:12) [7]
>
> не, тут вопрос не в "гарантии", а именно в "поведении" программы.
>
>
А как программа себя ведёт? Если программа позволяет с помощью клавиатуры и только с помощью клавиатуры вводить все необходимые данные для записи в БД, тогда я за проверку каждого значения в OnExit. Типа проверки орфографии в Ворде и т.п.
← →
Loginov Dmitry © (2008-12-12 20:54) [13]> Хотелось бы услышать, кто как решает данный момент.
Обычно подключаю модуль Hints.pas, и при нажатии "ОК" проверяю корректность введенных данных. В модуле есть функция ShowErrorHintEx(), которая автоматически устанавливает фокус на заданный компонент, показывает всплывающую подсказку с сообщением об ошибке, и прерывает выполнение кода с помощью Abort(). Удобно. Никаких лишних телодвижений операторам делать не приходится (наверно =).
← →
DVM © (2008-12-12 21:11) [14]
> venoel
Самое лучшее, если корректность ввода данных будет проверяться сразу по мере их ввода. Места ошибок должны подсвечиваться (например цвет, хинт и т.д.) и кнопка OK просто недоступна, до ввода корректных данных. Так юзеру понятнее - что то не дает ему нажать кнопку ок, а подсказки объясняют причину. Еще лучше не давать пользователю вводить некорректные данные, но не тупо не давать, а выдавать подсказки по поводу ввода.
← →
ivak © (2008-12-12 22:22) [15]как только юзер введёт неправильное, то
if pos("<какойто там символ который ты не хочешь>", edit1.text) then begin
label1.font.color := clRed;
label1.caption := "Некорректный ввод";
label1.visible := true;
end;
← →
Loginov Dmitry © (2008-12-12 22:50) [16]> if pos("<какойто там символ который ты не хочешь>", edit1.text)
> then begin
> label1.font.color := clRed;
> label1.caption := "Некорректный ввод";
> label1.visible := true;
> end;
Видел аналогичное решение: напротив поля с неверными данными появляется анимированная иконка "стоп". Она мигает, привлекая внимание, наводишь мышкой, появляется всплывающая подсказка, содержащая сведения об ошибке.
← →
blackman © (2008-12-12 22:50) [17]Самый лучший вариант - не давать юзеру вводить вообще, а только предлагать выбрать какие-то значения. Впрочем, и это надо контролировать.
← →
ivak © (2008-12-12 22:59) [18]ну да.
гениально
ListBox в котором будет три варианта пароля: 1111, q1w2e3, и qwerty да???
выбери верный...Х)))
← →
Loginov Dmitry © (2008-12-12 23:23) [19]> Самый лучший вариант - не давать юзеру вводить вообще, а
> только предлагать выбрать какие-то значения. Впрочем, и
> это надо контролировать.
это что-то за гранью фантастики
← →
ivak © (2008-12-12 23:30) [20]см. [18] ))))))))))))))))))))
← →
blackman © (2008-12-13 17:34) [21]Я не шучу. Пароль здесь ни при чем. А во всех остальных случаях надо предлагать выбор, а не ввод значений. Если известна логика проверки значений (как в данном вопросе) то скорее всего можно формировать эти значения (показывать варианты) по мере необходимости.
Т.е. не подсвечивать неверные, а подсказывать возможные верные.
← →
Loginov Dmitry © (2008-12-13 17:46) [22]> А во всех остальных случаях надо предлагать выбор, а не
> ввод значений.
[18] ivak насчет пароля верно заметил. В данном случае никаких возможных значений предугадать нельзя (если конечно не использовать кэширование пароля). Помимо пароля подобных примеров может быть сколь угодно много. Но в некоторых случаях, если известен ограниченный набор допустимых значений, можно предложить пользователю их выбор.
← →
ivak © (2008-12-13 20:44) [23][22]
согласен на все 100%
предлагаю тему закрыть остановившись на [18]
← →
blackman © (2008-12-14 00:03) [24]Помимо пароля подобных примеров может быть сколь угодно много.
Их не может быть много и не должно быть много. Если много, то логика программы неверна
← →
Loginov Dmitry © (2008-12-14 00:30) [25]> предлагаю тему закрыть остановившись на [18]
+1
← →
Германн © (2008-12-14 00:48) [26]
> Loginov Dmitry © (13.12.08 17:46) [22]
> blackman © (14.12.08 00:03) [24]
Я бы сказал, что главное тут: можно ли что-то проверить при вводе данных не имея "списка допустимых конечных значений"? Отсюда согласно битовой логике вытекают 4 возможных варианта.
Теперь можно продолжить холивар :)
← →
ivak © (2008-12-14 13:39) [27]
> Германн © (14.12.08 00:48) [26]
жжёшь
← →
venoel (2008-12-15 10:04) [28]Всем большое спасибо. Тоже придерживаюсь мнения, что можно/нужно проверять вводимое значение по мере его "поступления". Ну и есессно, перед нажатием "ОК".
Страницы: 1 вся ветка
Текущий архив: 2009.12.20;
Скачать: CL | DM;
Память: 0.54 MB
Время: 0.013 c