Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1257373411
Drowsy
2009-11-05 01:23
2009.12.20
Триггеры в Interbase.


15-1256107117
TIF
2009-10-21 10:38
2009.12.20
facebook обладает ИИ?


3-1231855810
Тень
2009-01-13 17:10
2009.12.20
Access и дата/время


2-1257311762
uMain
2009-11-04 08:16
2009.12.20
Мультиязычность


2-1257157792
yantar92
2009-11-02 13:29
2009.12.20
Глюки с вызовом процедуры по ссылке