Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 TValueListEditor, как обойти OnValidate при отказе от изменений  [new]
Belotsky Serge
Member

Откуда: Гомель
Сообщений: 199
Добрый день!

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

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

Есть ли какой-либо способ обойти это ограничение?
12 сен 18, 10:15    [21671793]     Ответить | Цитировать Сообщить модератору
 Re: TValueListEditor, как обойти OnValidate при отказе от изменений  [new]
goldmi45
Member

Откуда:
Сообщений: 1010
Belotsky Serge,

OnValidate срабатывает, если фокус меняется. Т.е. в этот момент ещё нельзя определить, что пользователь хочет сделать: нажать отмену, нажать "Ок" или переместиться на другую ячейку...
А что мешает вынести проверку в другое место? Я так понимаю, что это диалог, и в случае отмены данные не должны измениться. Вот и вынести проверку в момент до записи изменений и до того, как пользователь закроет форму?
12 сен 18, 10:39    [21671815]     Ответить | Цитировать Сообщить модератору
 Re: TValueListEditor, как обойти OnValidate при отказе от изменений  [new]
Belotsky Serge
Member

Откуда: Гомель
Сообщений: 199
goldmi45
Belotsky Serge,

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


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

Можно еще, OnValidate в случае ошибки, автоматически возвращать значение при входе в форму. Но это тоже как бы не очень хорошо, т.к. непонятно по какой причине сработал OnValidate: пользователь может ввести сложное значение, на которое потратил несколько секунд времени и допустил ошибку в одном символе, а программа взяла и заменила все на старое значение, вместо того, чтобы дать пользователю исправить введенное значение.
12 сен 18, 10:54    [21671834]     Ответить | Цитировать Сообщить модератору
 Re: TValueListEditor, как обойти OnValidate при отказе от изменений  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 8207
Belotsky Serge,
Можно в OnValidate не ругаться а просто маркировать невалидные данные, например цветом. И в статус-бар или еще куда нибудь выводить расшифровку претензии ко вводу в текущем поле.
12 сен 18, 11:07    [21671847]     Ответить | Цитировать Сообщить модератору
 Re: TValueListEditor, как обойти OnValidate при отказе от изменений  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10494
Соколинский Борис
Можно в OnValidate не ругаться а просто маркировать невалидные данные, например цветом. И в статус-бар или еще куда нибудь выводить расшифровку претензии ко вводу в текущем поле.
+ дизейблить кнопку OK.

У нас именно так и сделано
12 сен 18, 14:12    [21672166]     Ответить | Цитировать Сообщить модератору
 Re: TValueListEditor, как обойти OnValidate при отказе от изменений  [new]
Belotsky Serge
Member

Откуда: Гомель
Сообщений: 199
Соколинский Борис
Belotsky Serge,
Можно в OnValidate не ругаться а просто маркировать невалидные данные, например цветом. И в статус-бар или еще куда нибудь выводить расшифровку претензии ко вводу в текущем поле.


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

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

Всем спасибо!
12 сен 18, 15:36    [21672338]     Ответить | Цитировать Сообщить модератору
 Re: TValueListEditor, как обойти OnValidate при отказе от изменений  [new]
Василий 2
Member

Откуда:
Сообщений: 194
Тебе же посоветовали просто не выдавать мессаджбокс при ошибке. А все остальные средства уведомления о кривом вводе не помешают нажать Отмену. В чем проблема-то?
13 сен 18, 10:31    [21673170]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить