powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TValueListEditor, как обойти OnValidate при отказе от изменений
7 сообщений из 7, страница 1 из 1
TValueListEditor, как обойти OnValidate при отказе от изменений
    #39701294
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

У TValueListEditor есть проблема: при вводе некорректного значения в одну из ячеек срабатывает OnValidate (если есть).
Но! В случае, если пользователь решил отказаться от изменения (тупо жмет 'Отменить' формы) все равно срабатывает OnValidate впереди всего (OnClick, OnFormCloseQuery) и, более того, Sender в OnValidate оказывается экземпляр TValueListEditor.

Для закрытия формы пользователю необходимо обратно вбить корректное значение, что неудобно.
Или отказаться от OnValidate.

Есть ли какой-либо способ обойти это ограничение?
...
Рейтинг: 0 / 0
TValueListEditor, как обойти OnValidate при отказе от изменений
    #39701312
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Belotsky Serge,

OnValidate срабатывает, если фокус меняется. Т.е. в этот момент ещё нельзя определить, что пользователь хочет сделать: нажать отмену, нажать "Ок" или переместиться на другую ячейку...
А что мешает вынести проверку в другое место? Я так понимаю, что это диалог, и в случае отмены данные не должны измениться. Вот и вынести проверку в момент до записи изменений и до того, как пользователь закроет форму?
...
Рейтинг: 0 / 0
TValueListEditor, как обойти OnValidate при отказе от изменений
    #39701323
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldmi45Belotsky Serge,

OnValidate срабатывает, если фокус меняется. Т.е. в этот момент ещё нельзя определить, что пользователь хочет сделать: нажать отмену, нажать "Ок" или переместиться на другую ячейку...
А что мешает вынести проверку в другое место? Я так понимаю, что это диалог, и в случае отмены данные не должны измениться. Вот и вынести проверку в момент до записи изменений и до того, как пользователь закроет форму?

Согласен, эту проверку можно выполнить в FormCloseQuery.

Можно еще, OnValidate в случае ошибки, автоматически возвращать значение при входе в форму. Но это тоже как бы не очень хорошо, т.к. непонятно по какой причине сработал OnValidate: пользователь может ввести сложное значение, на которое потратил несколько секунд времени и допустил ошибку в одном символе, а программа взяла и заменила все на старое значение, вместо того, чтобы дать пользователю исправить введенное значение.
...
Рейтинг: 0 / 0
TValueListEditor, как обойти OnValidate при отказе от изменений
    #39701328
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Belotsky Serge,
Можно в OnValidate не ругаться а просто маркировать невалидные данные, например цветом. И в статус-бар или еще куда нибудь выводить расшифровку претензии ко вводу в текущем поле.
...
Рейтинг: 0 / 0
TValueListEditor, как обойти OnValidate при отказе от изменений
    #39701468
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисМожно в OnValidate не ругаться а просто маркировать невалидные данные, например цветом. И в статус-бар или еще куда нибудь выводить расшифровку претензии ко вводу в текущем поле.+ дизейблить кнопку OK.

У нас именно так и сделано
...
Рейтинг: 0 / 0
TValueListEditor, как обойти OnValidate при отказе от изменений
    #39701559
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Соколинский БорисBelotsky Serge,
Можно в OnValidate не ругаться а просто маркировать невалидные данные, например цветом. И в статус-бар или еще куда нибудь выводить расшифровку претензии ко вводу в текущем поле.

Как это поможет, если нажимается Cancel на строке с ошибочным значением? Вы даже не успеете это пометить цветом :(

Решил пойти по пути наименьшего сопротивления: отказаться от OnValidate и проверять в OnFormCloseQuery.

Всем спасибо!
...
Рейтинг: 0 / 0
TValueListEditor, как обойти OnValidate при отказе от изменений
    #39701909
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе же посоветовали просто не выдавать мессаджбокс при ошибке. А все остальные средства уведомления о кривом вводе не помешают нажать Отмену. В чем проблема-то?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TValueListEditor, как обойти OnValidate при отказе от изменений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]