|
|
|
TValueListEditor, как обойти OnValidate при отказе от изменений
|
|||
|---|---|---|---|
|
#18+
Добрый день! У TValueListEditor есть проблема: при вводе некорректного значения в одну из ячеек срабатывает OnValidate (если есть). Но! В случае, если пользователь решил отказаться от изменения (тупо жмет 'Отменить' формы) все равно срабатывает OnValidate впереди всего (OnClick, OnFormCloseQuery) и, более того, Sender в OnValidate оказывается экземпляр TValueListEditor. Для закрытия формы пользователю необходимо обратно вбить корректное значение, что неудобно. Или отказаться от OnValidate. Есть ли какой-либо способ обойти это ограничение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2018, 10:15 |
|
||
|
TValueListEditor, как обойти OnValidate при отказе от изменений
|
|||
|---|---|---|---|
|
#18+
Belotsky Serge, OnValidate срабатывает, если фокус меняется. Т.е. в этот момент ещё нельзя определить, что пользователь хочет сделать: нажать отмену, нажать "Ок" или переместиться на другую ячейку... А что мешает вынести проверку в другое место? Я так понимаю, что это диалог, и в случае отмены данные не должны измениться. Вот и вынести проверку в момент до записи изменений и до того, как пользователь закроет форму? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2018, 10:39 |
|
||
|
TValueListEditor, как обойти OnValidate при отказе от изменений
|
|||
|---|---|---|---|
|
#18+
goldmi45Belotsky Serge, OnValidate срабатывает, если фокус меняется. Т.е. в этот момент ещё нельзя определить, что пользователь хочет сделать: нажать отмену, нажать "Ок" или переместиться на другую ячейку... А что мешает вынести проверку в другое место? Я так понимаю, что это диалог, и в случае отмены данные не должны измениться. Вот и вынести проверку в момент до записи изменений и до того, как пользователь закроет форму? Согласен, эту проверку можно выполнить в FormCloseQuery. Можно еще, OnValidate в случае ошибки, автоматически возвращать значение при входе в форму. Но это тоже как бы не очень хорошо, т.к. непонятно по какой причине сработал OnValidate: пользователь может ввести сложное значение, на которое потратил несколько секунд времени и допустил ошибку в одном символе, а программа взяла и заменила все на старое значение, вместо того, чтобы дать пользователю исправить введенное значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2018, 10:54 |
|
||
|
TValueListEditor, как обойти OnValidate при отказе от изменений
|
|||
|---|---|---|---|
|
#18+
Belotsky Serge, Можно в OnValidate не ругаться а просто маркировать невалидные данные, например цветом. И в статус-бар или еще куда нибудь выводить расшифровку претензии ко вводу в текущем поле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2018, 11:07 |
|
||
|
TValueListEditor, как обойти OnValidate при отказе от изменений
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисМожно в OnValidate не ругаться а просто маркировать невалидные данные, например цветом. И в статус-бар или еще куда нибудь выводить расшифровку претензии ко вводу в текущем поле.+ дизейблить кнопку OK. У нас именно так и сделано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2018, 14:12 |
|
||
|
TValueListEditor, как обойти OnValidate при отказе от изменений
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисBelotsky Serge, Можно в OnValidate не ругаться а просто маркировать невалидные данные, например цветом. И в статус-бар или еще куда нибудь выводить расшифровку претензии ко вводу в текущем поле. Как это поможет, если нажимается Cancel на строке с ошибочным значением? Вы даже не успеете это пометить цветом :( Решил пойти по пути наименьшего сопротивления: отказаться от OnValidate и проверять в OnFormCloseQuery. Всем спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2018, 15:36 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39701323&tid=2040423]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
154ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 258ms |
| total: | 474ms |

| 0 / 0 |
