Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / в поле со списком выбор Enter -ом не приводит к генерации события "После обновления" / 19 сообщений из 19, страница 1 из 1
03.06.2016, 16:45
    #39250279
i_bison
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
Access 2002. На форме имеется простое Поле6, где вводится строка для поиска
и ПолеСоСписком39 назначение которого открыть для юзера список строк с вхождениями поисковой строки

в событии "после обновления" для Поле6 такой код:

Код: vbnet
1.
2.
3.
4.
      m_zak_list_find = Trim(UCase(Me.Поле6))
      
       DoCmd.GoToControl ("ПолеСоСписком39")
       SendKeys "%{DOWN}"





источник данных для ПолеСоСписком39 такой:

Код: plsql
1.
SELECT Заказной_лист_НЕОРИГ_find.key_z,  Заказной_лист_НЕОРИГ_find.txt,  Заказной_лист_НЕОРИГ_find.findtxt FROM Заказной_лист_НЕОРИГ_find WHERE (((Заказной_лист_НЕОРИГ_find.findtxt) Like '*' & get_m_zak_list_find() & '*'));




событие "вход" для ПолеСоСписком39 такой:

Код: vbnet
1.
Me.ПолеСоСписком39 .Requery





Имеет место такое явление
после ввода поисковой строки открывается список ПолеСоСписком39 нажатие Enter не приводит к генерации события "После обновления" соответственно позиционирование заложенное

в событии "После обновления":

Код: vbnet
1.
2.
3.
4.
5.
            Set rst = Forms![Заказной_лист_main]![Заказной_лист_неориг].Form.RecordsetClone
            
            rst.FindFirst "[key_z] = " & CStr(ko)
            
            If Not rst.EOF Then Forms![Заказной_лист_main]![Заказной_лист_неориг].Form.Bookmark = rst.Bookmark




в подчинённой форме не происходит.

Если же щёлкнуть мышкой в строку в открывшемся ПолеСоСписком39, то всё происходит как надо в любых ситуациях.

А хотелось бы всегда Enter -ом.
Как это исправить уже не знаю. Перепробовал, как мне кажется, много всего.
Enter срабатывает, если содержимое ПолеСоСписком39 изменилось.
как только оду и ту же поисковую строку вводишь раза два подряд, начинается отрицательное явление.

Подобную конструкцию применяю во многих формах, но именно на этой существует такой спотык.

Помогите исправить.
...
Рейтинг: 0 / 0
03.06.2016, 19:11
    #39250368
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
i_bison,
а поле6 случаем не свободное?
...
Рейтинг: 0 / 0
05.06.2016, 23:19
    #39250940
i_bison
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
sdku,

да, поле6 свободное.
попробовать сделать его не свободным ?
...
Рейтинг: 0 / 0
06.06.2016, 09:23
    #39251014
i_bison
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
sdku,

не помогло.
установил источник данных для формы где находятся Поле6 и ПолеСоСписком39
оба поля снабдил данными из источника.

глюк похоже относится к ПолеСоСписком39.
поле со списком надо обхитрить, чтоб оно думало буд-то первый раз обновляется его источник.
...
Рейтинг: 0 / 0
06.06.2016, 11:16
    #39251093
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
i_bisonAccess 2002. На форме имеется простое Поле6, где вводится строка для поиска
и ПолеСоСписком39 назначение которого открыть для юзера список строк с вхождениями поисковой строки

в событии "после обновления" для Поле6 такой код:
Код: vbnet
1.
2.
3.
4.
      m_zak_list_find = Trim(UCase(Me.Поле6))
      
       DoCmd.GoToControl ("ПолеСоСписком39")
       SendKeys "%{DOWN}"


источник данных для ПолеСоСписком39 такой:
Код: plsql
1.
SELECT Заказной_лист_НЕОРИГ_find.key_z,  Заказной_лист_НЕОРИГ_find.txt,  Заказной_лист_НЕОРИГ_find.findtxt FROM Заказной_лист_НЕОРИГ_find WHERE (((Заказной_лист_НЕОРИГ_find.findtxt) Like '*' & get_m_zak_list_find() & '*'));


событие "вход" для ПолеСоСписком39 такой:
Код: vbnet
1.
Me.ПолеСоСписком39 .Requery


Все это можно выполнять в процедуре Поле6_AfterUpdate() следующим образом,
без SendKeys и без процедуры ПолеСоСписком39_Enter()
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub Поле6_AfterUpdate()
 m_zak_list_find = Trim(UCase(Me.Поле6))
 Me.ПолеСоСписком39.Requery
 Me.ПолеСоСписком39.SetFocus
 Me.ПолеСоСписком39.Dropdown
.........
End Sub
...
Рейтинг: 0 / 0
06.06.2016, 11:18
    #39251095
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
Или так
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Поле6_AfterUpdate()
 m_zak_list_find = Trim(UCase(Me.Поле6))
 With Me.ПолеСоСписком39
  .Requery
  .SetFocus
  .Dropdown
 End With
.........
End Sub
...
Рейтинг: 0 / 0
06.06.2016, 11:44
    #39251120
i_bison
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
__Michelle,

работает. спасибо.
...
Рейтинг: 0 / 0
06.06.2016, 11:47
    #39251124
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
[quot i_bison]Access 2002. На форме имеется простое Поле6, где вводится строка для поиска
и ПолеСоСписком39 назначение которого открыть для юзера список строк с вхождениями поисковой строки [quot]
Это сильно похоже на масло масляноею
А чё не использовать поле6 в качестве образца поиска (с LIKE и поиском/фильтрацией по мере ввода символов)
...
Рейтинг: 0 / 0
06.06.2016, 15:11
    #39251286
i_bison
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
sdku,

по мере ввода символов было бы ещё лучше.
в каком-нибудь будущем проекте можно сделать так

пока же описанное мною решение распространено в программе
менять нет времени и крайней необходимости
...
Рейтинг: 0 / 0
06.06.2016, 17:20
    #39251415
i_bison
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
__Michelle,

в некоторых случаях не работает всё равно.
...
Рейтинг: 0 / 0
06.06.2016, 17:48
    #39251434
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
i_bison,

Вообще-то я не пыталась ответить на основной вопрос об Enter.
Просто увидела, как можно подправить код.

А можете пояснить, что происходит, по порядку?
Я поняла, что так:
После обновления значения Поле6 обновляется источник данных ПолеСоСписком39
SELECT key_z, txt, findtxt FROM Заказной_лист_НЕОРИГ_find WHERE findtxt Like '*' & get_m_zak_list_find() & '*'.
Затем поле ПолеСоСписком39 автоматически получает фокус, а список поля ПолеСоСписком39 автоматически раскрывается,
пользователь ищет в списке нужное значение клавишами со стрелками (раз говорится, что не мышью),
найденное нужное значение выбирает нажатием клавиши Enter.
При этом не всегда срабатывает событие AfterUpdate для ПолеСоСписком39.

Правильно или нет?
...
Рейтинг: 0 / 0
06.06.2016, 18:06
    #39251446
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
i_bison,

Пока могу предложить такой рецепт, может, сомнительный,
так как он нацелен не на причину несрабатывания, а на следствие.
Код: vbnet
1.
2.
3.
4.
5.
Private Sub ПолеСоСписком39_KeyDown(KeyCode As Integer, Shift As Integer)
 If KeyCode = 13 And Not Shift Then
  Call Поле6_AfterUpdate
 End If
End Sub
...
Рейтинг: 0 / 0
06.06.2016, 18:08
    #39251450
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
Конечно, не Поле6_AfterUpdate, а ПолеСоСписком39_AfterUpdate.
Код: vbnet
1.
2.
3.
4.
5.
Private Sub ПолеСоСписком39_KeyDown(KeyCode As Integer, Shift As Integer)
 If KeyCode = 13 And Not Shift Then
  Call ПолеСоСписком39_AfterUpdate
 End If
End Sub
...
Рейтинг: 0 / 0
06.06.2016, 18:19
    #39251456
i_bison
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
__Michelle,

да так оно и есть.
уточнить могу следующим.

первый раз всегда срабатывает поиск.
вводишь поисковую строку, открывается список весь "белый", нажимаешь стрелку вниз, строчка-селектор становится чёрного цвета. ентер срабатывает.
если повторно вводишь ту же самую поисковую строку, открывается список с уже черной строкой, как бы выбранная селектором.
особенно отчётливо это проявляется когда в раскрывшемся списке одна единственная строка,
даже стрелками не двинешь вверх-вниз, тогда ентер не срабатывает
...
Рейтинг: 0 / 0
06.06.2016, 18:20
    #39251457
i_bison
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
__Michelle,

годятся все рецепты. попробую этот. но позже.
...
Рейтинг: 0 / 0
06.06.2016, 18:28
    #39251462
i_bison
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
__Michelle,

с этим кодом
заработало и там где не работало

спасибо за дельные советы.
...
Рейтинг: 0 / 0
06.06.2016, 18:29
    #39251463
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
i_bison,

Ага.
Тогда не надо проверять на Enter.
Надо не только обновлять источник данных для ПолеСоСписком39, а и очищать само это поле.
Тогда всегда список будет открываться "белым" и будут срабатывать и стрелочки, и Enter.

То есть, дополнить
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
..................
 With Me.ПолеСоСписком39
  .Requery
  .Value = Null
  .SetFocus
  .Dropdown
 End With
..................
...
Рейтинг: 0 / 0
07.06.2016, 11:45
    #39251777
i_bison
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
__Michelle,

девушка,после этого комментария я вас люблю.

value = null улучшило ситуацию.

но без кода в событии "кнопка вниз" всё равно не обойтись. вот почему.

когда юзер НЕ вводя значение в Поле6 сразу открывает ПолеСоСписком39, а там всего одна строка

и она чёрная т.е. ранее уже выбранная , то помогает как раз

Код: vbnet
1.
2.
3.
4.
5.
Private Sub ПолеСоСписком39_KeyDown(KeyCode As Integer, Shift As Integer)
 If KeyCode = 13 And Not Shift Then
  Call ПолеСоСписком39_AfterUpdate
 End If
End Sub




поэтому все ваши советы очень уместные и своевременные, с их помощью удалось победить кривляния ПоляСоСписком

спасибо большое Мишель за помощь. Если что (как в мультике) мой емайл i_bison@mail.ru
...
Рейтинг: 0 / 0
07.06.2016, 12:32
    #39251812
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в поле со списком выбор Enter -ом не приводит к генерации события "После обновления"
i_bison,

)))

P.S. Но на ПолеСоСписком наговаривать не надо – это его естественное поведение, а не кривляния.)))
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / в поле со списком выбор Enter -ом не приводит к генерации события "После обновления" / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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