|
|
|
Об обработке предшествующих событий в LostFocus
|
|||
|---|---|---|---|
|
#18+
Обрабатываю LOSTFOCUS объекта TEXTBOX. Есть ли возможность определить программно, как был "покинут" объект.... Или, предположим, нажали клавишу ENTER / ESC, или нажали какую-то командную кнопку, или произошло какое-то событие ? Заранее буду благодарен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2007, 14:55 |
|
||
|
Об обработке предшествующих событий в LostFocus
|
|||
|---|---|---|---|
|
#18+
В общем случае, обработать все возможные ситауции - нельзя. Сама постановка вопроса говороит о том, что "в консерватории что-то надо подправить". Т.е. сама постановка задчи в чем-то не правильная. Если опишешь зачем это надо, возможно, тебе подскажут другие решения проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2007, 19:09 |
|
||
|
Об обработке предшествующих событий в LostFocus
|
|||
|---|---|---|---|
|
#18+
На форме размещаю поля (TEXTBOX) для ввода данных. Размещаю 2 командные кнопки: "Запись" и "Отмена". По Кнопке "Запись" провожу полную семантическую проверку и прописываю, в случае успеха, в таблицу. В случае ошибки сообщаю и устанавливаю курсор на ошибочном поле (это общая проверка по всем полям). Кнопкой "Отмена" сбрасываю все поля ввода/изменения в исходное состояние. Кроме того, в проверяемых полях прописываю также проверку но в событии LOSTFOCUS и, если ошибка - о ней сообщается, но курсор остается на этом поле(работа через VALID мне что-то не понравилась... может не допонимаю). Создаю ошибочную ситуацию по какому-то реквизиту и пытаюсь кнопкой "Сброс" вернуть все в исходное состояние, но мне выдается сообщение об ошибке в этом поле, которую я не хотел бы видеть (я же сбрасываю ситуацию).То же самое происходит и при аварийном выходе из формы. В этом,собственно, и суть проблемы для меня. Я понимаю, что вся проблемы в последовательности обработки событий, поэтому и задавал свой вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 08:19 |
|
||
|
Об обработке предшествующих событий в LostFocus
|
|||
|---|---|---|---|
|
#18+
Лео_данСоздаю ошибочную ситуацию по какому-то реквизиту и пытаюсь кнопкой "Сброс" вернуть все в исходное состояние, но мне выдается сообщение об ошибке в этом поле, которую я не хотел бы видеть (я же сбрасываю ситуацию)... А Вы используете буферизацию данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 09:13 |
|
||
|
Об обработке предшествующих событий в LostFocus
|
|||
|---|---|---|---|
|
#18+
Последовательность событий можешь через EventTracking посмотреть: form1.text1.Valid() form1.command1.When() form1.text1.LostFocus() form1.command1.GotFocus() form1.command1.Click() Можешь завести флаг на форме например lNoCheck при thisform.lNoCheck = .T. проверку не делать. А в кнопке: Код: plaintext 1. 2. 3. 4. 5. 6. Для других ситуаций (закрытие окна крестиком) смотри порядок событий и ищи куда вставить Код: plaintext Но я бы не рекомендовал так жестко все контролировать. Достаточно одной проверки перед сохранением, мало ли пользователь по каким-то причинам умышленно недозаполнил поле и решил сначала заполнить другое. LostFocus() так же срабатывает при переключении на окно другого приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 09:30 |
|
||
|
Об обработке предшествующих событий в LostFocus
|
|||
|---|---|---|---|
|
#18+
Лео_данОбрабатываю LOSTFOCUS объекта TEXTBOX. Есть ли возможность определить программно, как был "покинут" объект.... Или, предположим, нажали клавишу ENTER / ESC, или нажали какую-то командную кнопку, или произошло какое-то событие ? Заранее буду благодарен по минимуму так, в том же Lostfocus(): Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 09:45 |
|
||
|
Об обработке предшествующих событий в LostFocus
|
|||
|---|---|---|---|
|
#18+
Лео_данОбрабатываю LOSTFOCUS объекта TEXTBOX. Есть ли возможность определить программно, как был "покинут" объект.... Или, предположим, нажали клавишу ENTER / ESC, или нажали какую-то командную кнопку, или произошло какое-то событие ? Заранее буду благодарен Сорри за небольшие ошибочки... по минимуму так, в том же Lostfocus(): Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 09:48 |
|
||
|
Об обработке предшествующих событий в LostFocus
|
|||
|---|---|---|---|
|
#18+
Всем большое спасибо (особенно ДИМА Т). Информации вполне достаточно, чтобы решить проблему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 11:04 |
|
||
|
Об обработке предшествующих событий в LostFocus
|
|||
|---|---|---|---|
|
#18+
Dima TПоследовательность событий можешь через EventTracking посмотреть: form1.text1.Valid() form1.command1.When() form1.text1.LostFocus() form1.command1.GotFocus() form1.command1.Click() Последовательность событий меняется в случае перехода между объектами клавиатурой или мышкой. Приведенное "смешение" событий - это следствие использование мышки. Если же переход осуществляется при помощи только клавиатуры, то все происходит последовательно. Сначала все события "выхода" для одного объекта, затем все события "входа" для другого. Кроме того, при потерей фокуса формой (из объекта не выходили) последовательность совсем другая. А при программном перемещении - еще один вариант. Поэтому, использовать EventTracking надо с осторожностью. Понимая, что рассматривается всего-лишь один из множества вариантов действий пользователя. Повторюсь, в общем случае, как-то "закладываться" на последовательность выполнения событий - глупо. Это будет всего-лишь один из множества вариантов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 14:49 |
|
||
|
Об обработке предшествующих событий в LostFocus
|
|||
|---|---|---|---|
|
#18+
ВладимирМПоследовательность событий меняется в случае перехода между объектами клавиатурой или мышкой. Приведенное "смешение" событий - это следствие использование мышки. Если же переход осуществляется при помощи только клавиатуры, то все происходит последовательно. Сначала все события "выхода" для одного объекта, затем все события "входа" для другого. Меняется, но в рамках поставленной автором задачи не влияет на результат. И даже правильно меняется если по порядку обхода за полем сразу стоит кнопка. К тому же клик на кнопке мышью и переход фокуса после поля на кнопку (по Enter или Tab) - это разные действия (во втором случае Click() не выполняется). Может разработчики фокса не случайно порядок событий сменили? ВладимирМПовторюсь, в общем случае, как-то "закладываться" на последовательность выполнения событий - глупо. Это будет всего-лишь один из множества вариантов. Согласен, но чтобы знать все множество надо знать все варианты. Или предлагаете умалчивать об приемах, которые могут иметь "побочные проблемы"? Речь ведь не об "общем" решении, а о конкретной проблеме, которая не решается другими способами, разве что таймерами, но с ними тоже не все гладко. Я автора честно предупредил о недостатках выбранного им подхода. Так что пусть знает все достоинства и недостатки такого подхода, а использовать или нет решать ему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 09:35 |
|
||
|
Об обработке предшествующих событий в LostFocus
|
|||
|---|---|---|---|
|
#18+
Dima T ВладимирМПоследовательность событий меняется в случае перехода между объектами клавиатурой или мышкой. Меняется, но в рамках поставленной автором задачи не влияет на результат. Как раз в рамках задачи и влияет. Ведь предложен вариант, когда флаг lNoCheck "взводится" в событии Command.When() с тем, чтобы потом выполнить его анализ в Text.LostFocus() именно исходя из предположения, что одно событие выполняется перед другим. Явно "закладываясь" на определенный порядок срабатывания событий, который нарушается при клавиатурном переходе между объектами. Хотя в остальном согласен. Сама задача поставлена не разумно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 19:46 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=35003435&tid=1588417]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
40ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 316ms |

| 0 / 0 |
