powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как скрыть элемент при потери им фокуса?
6 сообщений из 6, страница 1 из 1
Как скрыть элемент при потери им фокуса?
    #34265226
e-raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть поле со списком, по умолчанию скрытое. Программно (по нажатию кнопки) поле выводится на экран, получает фокус, открывает список для выбора конкретного значения пользователем. Если пользователь выбирает значение, то возникает событие обновления, по которому фокус переводится с поля, само поле скрывается. Но вот если пользователь ничего из списка не выбирает, то и событий никаких нет, кроме событий выхода и потери фокуса. Но они не позволяют скрыть поле - оно по-прежнему в фокусе! Подскажите, как данную проблему лучше обойти?
...
Рейтинг: 0 / 0
Как скрыть элемент при потери им фокуса?
    #34265312
Любопыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
e-ravenНо вот если пользователь ничего из списка не выбирает, то и событий никаких нет.
Так по какому событию вы хотите скрыть это поле?
Вообще не рекомендуется делать контролы, которые исчезают и появляются, лучше Enable использовать... Это так совет. Пользователя может обескуражить если контрол вдруг исчезнет.
...
Рейтинг: 0 / 0
Как скрыть элемент при потери им фокуса?
    #34266059
e-raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том-то и дело, что не найду такого события. А скрывать комбобокс нужно по той причине, что с помощью него и кнопки эмулируется тулбар с кнопкой DropDown. Если сделать высоту комбобокса нулевой, всё равно комбобокс немного виден.
...
Рейтинг: 0 / 0
Как скрыть элемент при потери им фокуса?
    #34266260
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
e-raven,
может, у комбобокса уменьшить ширину (не высоту), оставив видимой только кнопку (а, свойству "Ширина списка" присвоить конкретное значение, а не "Авто")? И - вот ещё.
...
Рейтинг: 0 / 0
Как скрыть элемент при потери им фокуса?
    #34267206
e-raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если уменьшить и высоту и ширину поля со списком до нуля, то на экране комбобокс проявляется в виде точки, что не очень смотрится. Уж лучше в виде горизонтальной или вертикальной черты, которую можно расположить под кнопкой или слева от неё (справа неудобно, так как список открывается вправо; если только кнопку со стрелкой расположить слева от обычной кнопки, но это непривычное расположение). Вариант с контекстным меню сам по себе более громоздкий, к тому же в моей базе все меню формируются динамически при входе в базу - не хотелось бы их плодить. Блокировать комбобокс, как предлагают некоторые, не получится - та же проблема, что и со скрытием: пока элемент имеет фокус, его ни блокировать, ни скрыть нельзя!!!
...
Рейтинг: 0 / 0
Как скрыть элемент при потери им фокуса?
    #34268424
e-raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В одноименной закрытой ветке Люботыт (сбасибо ему) дал очевидное решение: в процедуре обработки события потери фокуса комбобокса использовать SetFocus на другой элемент. Но по ходу пришлось решать следующую проблему. После открытия списка возможны следующие варианты: пользователь делает выбор мышью, нажимает ESC, щелкает мышью на форме (фокус остается на комбобоксе) или переводит фокус на другие элементы мышью, нажатием клавиш Enter,Tab. В первых случаях для инициирования события потери фокуса необходимо программно передать фокус другим элементам, а вот этого как раз сделать и нельзя - возникает ошибка с сообщением о невозможности в данный момент передать фокус другому элементу. Поэтому пришлось использовать в соответствующих процедурах On Error Resume Next, что не очень-то хорошо.

В упрощенном варианте это стало выглядеть следующим образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
Private Sub Кнопка1_Click()
    If Me.ПолеСоСписком1.Visible = True Then
        Me.ПолеСоСписком1.Visible = False
    Else
        Me.ПолеСоСписком1.Visible = True
        Me.ПолеСоСписком1.SetFocus
        Me.ПолеСоСписком1.Dropdown
    End If
End Sub

Private Sub ОбластьДанных_Click()
    On Error Resume Next
    If Screen.ActiveControl.Name = "ПолеСоСписком1" Then Me.Кнопка1.SetFocus
End Sub

Private Sub ПолеСоСписком1_AfterUpdate()
    On Error Resume Next
    Me.Кнопка1.SetFocus
    ' обработка выбора пользователя
End Sub

Private Sub ПолеСоСписком1_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyEscape Then
        On Error Resume Next
        Me.Кнопка1.SetFocus
    End If
End Sub

Private Sub ПолеСоСписком1_LostFocus()
    Me.Кнопка1.SetFocus
    Me.ПолеСоСписком1.Visible = False
End Sub

Private Sub ПолеСоСписком1_NotInList(NewData As String, Response As Integer)
    Me.ПолеСоСписком1 = Null
End Sub
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как скрыть элемент при потери им фокуса?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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