Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Faoxis
6 / 6 / 0
Регистрация: 11.04.2012
Сообщений: 114
1

Контроль ввода даты и выдача сообщения в случае ошибки неверного ввода

05.10.2014, 23:47. Просмотров 1659. Ответов 13
Метки нет (Все метки)

Здравствуйте!
У меня есть такая вот форма(скрин ниже). Смысл в том, что если пользователь введет в дате не дату(а там стоит тип данных - дата), а потом перейдет к примечанию или куда-нибудь еще, то windows начнет ругаться на законных основаниях.
Как объяснить пользователю, что введен неправильный тип данных, а самое главное, как избежать ошибку от windows самым надежным способом ?
0
Миниатюры
Контроль ввода даты и выдача сообщения в случае ошибки неверного ввода  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2014, 23:47
Ответы с готовыми решениями:

Контроль ввода даты в MaskEdit и выдача сообщения в случае ошибки неверного ввода
Всем доброго дня! Использую MaskEdit для ввода даты формат: dd/mm/yyyy...

Контроль ввода в Edit
всем привет. как организовать контроль ввода данных в edit - необходимо...

Контроль ввода в Edit
В edit1 нужно вводить только числа либо русские буквы. Как это...

контроль правильности ввода
В программе должен быть реализован контроль правильности ввода цифровых...

Реализовать контроль ввода
Ребята... я всего лишь первокурсник... по-этому не судите строго... мне нужно...

13
Faoxis
6 / 6 / 0
Регистрация: 11.04.2012
Сообщений: 114
06.10.2014, 00:06  [ТС] 2
Другими словами, как сделать проверку на тип после окончания редактирования. Должно же быть такое событие.
0
northener
пофигист широкого профиля
3428 / 2327 / 631
Регистрация: 15.07.2013
Сообщений: 13,784
06.10.2014, 02:19 3
Цитата Сообщение от Faoxis Посмотреть сообщение
Другими словами, как сделать проверку на тип после окончания редактирования. Должно же быть такое событие.
Нет такого события. Да и быть не может.
Если говорить именно о событиях, то есть TWinControl.OnExit
Ещё можно проверять введенные данные в событии нажатия кнопки "Добавить".
Цитата Сообщение от Faoxis Посмотреть сообщение
как избежать ошибку от windows самым надежным способом ?
Думать головой, когда пишешь свой код.
0
Faoxis
6 / 6 / 0
Регистрация: 11.04.2012
Сообщений: 114
06.10.2014, 07:32  [ТС] 4
Цитата Сообщение от northener Посмотреть сообщение
Ещё можно проверять введенные данные в событии нажатия кнопки "Добавить".
Цитата Сообщение от Faoxis Посмотреть сообщение
Смысл в том, что если пользователь введет в дате не дату(а там стоит тип данных - дата), а потом перейдет к примечанию или куда-нибудь еще, то windows начнет ругаться на законных основаниях.




Цитата Сообщение от northener Посмотреть сообщение
Сообщение от Faoxis
как избежать ошибку от windows самым надежным способом ?
Думать головой, когда пишешь свой код.
Очень полезный совет. Спасибо! Если бы только мои знания увеличивались от этого как-нибудь...



Как сделать проверку типов в принципе ? И как сделать, чтобы она происходила после ввода значения в edit ? Вопрос остается в силе...
0
ZfoxAK
506 / 490 / 222
Регистрация: 26.11.2012
Сообщений: 1,931
06.10.2014, 08:24 5
Использовать код для обработки исключений
Delphi
1
try ... except .. end;
Подходящие для этого события OnExit и/или OnKeyPress.
Или как советовал northener включить голову. Совет дельный, но вами был отвергнут.
Лучше не допускать ввода неверного формата. И для этого можно использовать компоненты типа MaskEdit или DateTimePicker.
0
edukra
510 / 480 / 181
Регистрация: 24.01.2012
Сообщений: 1,161
06.10.2014, 08:36 6
вместо dbedit можно использовать обычный edit и заносить данные в БД уже по нажатию кнопки "добавить" . Тогда будет полный контроль над ситуацией.

Добавлено через 10 минут
Да. Кстати. Есть еще библиотека RXLib. В ней есть dbdateedit. Он как-раз соответствует требованию и к тому-же к нему прикручен календарь, что повышает удобство ввода.
1
mss
2634 / 2258 / 276
Регистрация: 24.12.2010
Сообщений: 13,725
06.10.2014, 10:20 7
Faoxis, любой наследник TCustomEdit публикует событие OnChange, в обработчике которого можно проверить текст контрола на валидность и при необходимости сделать кнопку "Добавить" неактивной

Тем самым блокируется возможность дальнейшей обработки не только невалидного текста, введенного путем прямого набора с клавиатуры, но и путем вставки оного из буфера обмена.
1
Faoxis
6 / 6 / 0
Регистрация: 11.04.2012
Сообщений: 114
06.10.2014, 16:47  [ТС] 8
Цитата Сообщение от ZfoxAK Посмотреть сообщение
Или как советовал northener включить голову. Совет дельный, но вами был отвергнут.
Считаю данный совет неправомерным. Я чуть больше месяца дружу с делфи. Мог бы придумать что-нибудь большое и страшное, но сюда зашел, чтобы получить совет и научиться чему-то новому, а не лицезреть чужое эго. Так же, было бы здорово, если бы люди писали только по делу, связанному с программировании в среде Delphi.
0
MaximFegorsk
32 / 53 / 9
Регистрация: 05.12.2013
Сообщений: 254
08.10.2014, 08:35 9
В событии BeforePost можно проверять значение этого поля. Если значение не удовлетворяет можно отменить отправку данных, выдать сообщение и попросить пользователя ввести заново. Также можно воспользоваться маской, что поможет свести ошибки ввода к минимуму. А вообще, на мой взгляд, дату удобнее вводить через DataTimePicker
1
Faoxis
6 / 6 / 0
Регистрация: 11.04.2012
Сообщений: 114
08.10.2014, 08:59  [ТС] 10
Maxim*******, спасибо. Я воспользовался DataTimePicker.
0
edukra
510 / 480 / 181
Регистрация: 24.01.2012
Сообщений: 1,161
08.10.2014, 09:07 11
Цитата Сообщение от Maxim******* Посмотреть сообщение
В событии BeforePost можно проверять значение этого поля
в том-то и дело, что даже до события onexit в dbedit дело не доходит. Исключение генерируется раньше. Не говоря уже о beforepost.
0
FIL
08.10.2014, 09:12
  #12
 Комментарий модератора 
Faoxis, ZfoxAK, прекращаем оффтоп.
0
Доцент
2 / 2 / 1
Регистрация: 23.04.2012
Сообщений: 115
08.10.2014, 16:46 13
Послушайте, вы используете DB компоненты, они уже вроде не должны давать вводить данные отличные от типа подключаемого поля.
Когда-то делал обработку, там нужна маска, но ещё можно посмотреть в сторону события потери фокуса onExit
1
Faoxis
6 / 6 / 0
Регистрация: 11.04.2012
Сообщений: 114
08.10.2014, 19:10  [ТС] 14
Цитата Сообщение от Доцент Посмотреть сообщение
Послушайте, вы используете DB компоненты, они уже вроде не должны давать вводить данные отличные от типа подключаемого поля.
Когда-то делал обработку, там нужна маска, но ещё можно посмотреть в сторону события потери фокуса onExit
Сейчас, к сожалению, не имею возможности предоставить более полную информацию и опробовать рекомендованный вами способ. Позже отпишу и все покажу.
0
08.10.2014, 19:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2014, 19:10

Контроль ввода (только буквы)
нужна помощь в написание проги задание - Создать приложение, в котором...

Контроль ввода букв из текстового файла
Уважаемые участники форума, подскажите, пожалуйста, написать программу,...

Маска ввода даты и времени
При вводе в MaskEdit1, в принципе работает всё, выбираю нужную маску и ввожу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru