|
|
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
На форме есть текстбокс и кнопка. У текстбокса есть AfterUpdate, а у кнопки OnClick. Курсор стоит на текстбоксе, я кликаю мышкой по кнопке. И почему-то AfterUpdate текстбокса срабатывает, а OnClick кнопки нет, только фокус на кнопку переходит. Если кликнуть второй раз, то срабатывает и OnClick. Кто-нибудь сталкивался? Спасибо заранее всем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2003, 17:04 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
А поле перед нажатием на кнопку обновлялось? Если нет, тогда интересно. Если да, то при нажатии на кнопку должны сначала отработать события относящиеся к полю AfterUpdate -> Lost Focus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2003, 17:13 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
> А поле перед нажатием на кнопку обновлялось? Конечно, иначе бы AfterUpdate не сработал. > Если нет, тогда интересно. :^) Мне как раз интересно так, как у меня. > Если да, то при нажатии на кнопку должны сначала отработать события относящиеся к полю AfterUpdate -> Lost Focus Но после "сначала" должно наступить "потом"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2003, 17:17 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
Возможно проблема в самих обработчиках событий. Я смоделировал такую ситуацию - отрабатывают оба события После "перед" "Потом" все-таки наступает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2003, 17:22 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
> Возможно проблема в самих обработчиках событий. Видимо, да. Потому что эта форма работала, пока я не добавил в тот AfterUpdate новую строчку: Peremennaya = True А что теперь делать-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2003, 17:24 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
Для того, чтобы что-то посоветовать не хватает данных. Режим: adp или mdb? Форма: простая или ленточная? Контролы: в одном разделе или в разных? Может у Вас между этими событиями еще какое-то вклинивается? Ну и какой текст обработчиков событий? Все эти вопросы, может быть и не имеют значения, но по крайней мере дают общую картину. А бывает еще, что кому-то начинаешь объяснять в чем проблема более подробно и тут сам обнаруживаешь ошибку на самом видном месте. Как говорится: "а слона-то мы и не заметили" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2003, 17:36 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
В 2000 аксесе у меня весьма часто просто обработчик событий, т.е. функция типа Btn_OnClick есть, а в пропертях кнопки напротив данного события пусто. Может, здесь та же фигня? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2003, 17:38 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
> Режим: adp или mdb? mdb, Access 97. > Форма: простая или ленточная? Простая. > Контролы: в одном разделе или в разных? В одном. > Может у Вас между этими событиями еще какое-то вклинивается? Не нахожу такого события. > Ну и какой текст обработчиков событий? Private Sub TheText_AfterUpdate() UpdateField "TheText", "", Me!TheText Peremennaya = True 'до добавки этой строчки все работало! End Sub Private Sub TheButton_Click() Me!OtherControl.SetFocus Me!TheButton.Enabled = False EvtPostVar Evt_CloseProp, False Me!TheButton.Enabled = True End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2003, 17:45 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
To Лох Позорный: Я же говорю: если кликнуть второй раз, то срабатывает и OnClick. Так что Ваша гипотеза не подтвердилась. :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2003, 17:47 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
Немного не понятно что такое UpdateField... И очень смущает обработчик кнопки - это наверное предотвращение повторного нажатия? Ну это не совсем по теме :) А по теме могу только посоветовать: - попробовать трассировать, поставить точку останова и там и там - наставить через каждый шаг Debug.Print "1", 2, 3..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2003, 18:08 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
> Немного не понятно что такое UpdateField... Некая моя процедура, как и EvtPostVar. > И очень смущает обработчик кнопки - это наверное предотвращение повторного нажатия? Так точно. :^) > - попробовать трассировать, поставить точку останова и там и там > - наставить через каждый шаг Debug.Print "1", 2, 3..... Так ведь все известно. В AfterUpdate заходит, а в OnClick нет. А что там между ними происходит - Билл Гейтс его знает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2003, 18:32 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
Так Вы же сами говорите, что перестало работать после ... Вот и посмотрите в отладчике что происходит. Заремить одну строку и еще раз посмотреть. У меня никак не получается добиться такого результата как у Вас - все обработчики работают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2003, 19:09 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
Повторяю, я не могу пользоваться отладчиком в тех частях программы, которые находятся между событиями и подвластны одному Биллу Гейтсу. Ау, люди, я ищу кого-нибуль, кто сталкивался с этой проблемой... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2003, 20:51 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
Ау... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 16:08 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
Тупой вопрос: При пошаговой трассировке (от любого места в TheText_AfterUpdate) попадаете ли на TheButton_Click ? (что-то такого рода иногда возникает при Docmd.Close и т.п. - на одних машинах [всегда] закрывается один объект, - на других - другой, т.е. порядок событий начинает зависеть от черт знает чего, и приходится явно задавать имена, видимо ассинхронные процессы - "нити" имеют место :) (есть многое на свете, в том числе и промежуточные, в т.ч. обрабатываемые события могут быть задействованы). Если да (т.е. переход при пошаговой обработке имеет место), и никаких промежуточных событий не возникает - тогда можно полагать, что проблема во внутренностях Access. При простой расстановке ваших обработчиков (с заглушками процедур) в форме ваша ситуация не воспроизводится, оба события возбуждаются. С полагающейся регулярностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 16:33 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
> При пошаговой трассировке (от любого места в TheText_AfterUpdate) попадаете ли на TheButton_Click ? 100% - нет. Там на Click такого понаписано (обращение к AS/400 и прочая, прочая)... Если бы оно вызывалось где не надо - был бы кошмар. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 17:15 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
Сомневаюсь, что поможет, но все же - попробуйте до и после выполнения "длинных" операций поставить DoEvents ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 17:28 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
Где? В AfterUpdate? Там длинных операций нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 17:34 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
Ну хоть бы и в конце процедуры AfterUpdate. Что ж поделаешь, не получается получить такую же ситуацию, вот и идут предложения из области "а попробуйте бутылку возле монитора поставить" :) Мне, например, DoEvents, помогло в такой ситуации - после открытия формы, вызывались еще функции, которые изменяли внешний вид формы. Так вот на Access 2000 все работало, а при переходе на 2002 пока после оператора открытия формы не поставил DoEvents выдавало ошибку. Видать 2002 чуть по-другому рисует формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 17:43 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
Попробую, спасибо. Вообще, я знал, что DoEvents иногда помогает, но тут показалось, что не тот случай... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 18:04 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
могу ещё посоветавать назначать фокус кнопке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 19:33 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
Каким образом назначать? На OnClick делать SetFocus??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 20:09 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
попробуйте кнопка.SetFocus повесить последним оператором на текстбокс.AfterUpdate тогда при нажатии точно должно отрабатывать с первого раза ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 20:39 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
> попробуйте кнопка.SetFocus повесить последним оператором на текстбокс.AfterUpdate Увы, это противоречит логике программы. Фокус не должен перескакивать на кнопку после каждого AfterUpdate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2003, 11:23 |
|
||
|
Конфликт двух событий
|
|||
|---|---|---|---|
|
#18+
Полный абзац. Сегодня оказалось, что абсолютно та же проблема с абсолютно идентичными симптомами (!!!) имеется и в JavaScript'е. Только там не AfterUpdate, а onblur. Видимо, клик собирается произойти, но видит, что какое-то предыдущее событие исполняется, и не дождавшись уходит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2003, 16:32 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32130544&tid=1681921]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 259ms |
| total: | 418ms |

| 0 / 0 |
