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