Как рассматривать комбобокс как ссылку на другую форму? - PullRequest
0 голосов
/ 04 мая 2018

Я пытался изменить комбинированный список, чтобы рассматривать выбранный элемент как ссылку на другую форму.

Основной рабочий процесс прост; Я хочу, чтобы текст в выпадающем списке функционировал как ссылка, когда не выбирается новый элемент из списка. Эта ссылка откроет новую форму и найдет соответствующую запись. то есть. нажмите на имя клиента, чтобы открыть форму клиента и показать его информацию.

Проблема специфична для выпадающего списка; та же функциональность прекрасно работает для текстового поля. Поместите код в событие Click, форма откроется, перейдет к нужной записи, легко peasy. Я должен быть в состоянии сделать то же самое с помощью комбинированного списка, верно?

Неа. Событие Click в Combobox срабатывает только при выборе нового элемента из списка . Там написано Clicks a control with the left mouse button. Clicking a control with the right or middle mouse button does not trigger this event., но при нажатии ничего не происходит.

Хорошо. Давайте установим это как гиперссылку. Это должно запустить событие Click! Нету. Сначала он пытается перейти по ссылке, и поскольку значение является внутренним первичным ключом, он не знает, что с ним делать. Так что это ошибки и никуда не денется.

Теперь мои попытки становятся более эзотерическими. Давайте скроем прямоугольник за выпадающим списком и поместим код в его событие Click! Нету. Не течет к объекту позади. Давайте просто поместим это поверх выпадающего списка! Нету. По-прежнему не запускает событие Click прямоугольника.

Хорошо, избавься от прямоугольника. Давайте попробуем поместить код в событие MouseUp в Combobox. Бинго. Нажатие на текст работает сейчас. Но ... теперь он делает это каждый раз, когда я нажимаю на него. Я не хочу, чтобы он открывал форму, когда пытался выбрать другого клиента.

Я пытался определить, когда раскрывающийся список раскрыт , и не переходить по ссылке, когда она возвращает значение true. Это ... вроде работает. Теперь он не закроет развернутый раскрывающийся список, и вы не сможете его отладить, потому что код обнаружения находится на низком уровне, и при отображении экрана отладки он возвращает false (поскольку раскрывающийся список больше не открыт).

Я пытался установить статическую переменную так, чтобы она переходила по ссылке, только если не выбран новый элемент. Это супер противоречиво, так как нет хорошего способа выяснить, в каком состоянии находится комбинированный список.

Превратить текст в интерактивную ссылку не должно быть так сложно. Как сделать ссылку на выбранный в данный момент элемент в выпадающем списке, но при этом не сделать ссылку на все остальное в выпадающем списке одновременно? Я пропустил событие или что-то?

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Я думаю, что у меня есть решение, которое будет работать для вас, поскольку я понимаю, что вы пытаетесь сделать.

Чтобы настроить форму, наложите текстовое поле (я использовал Text3) на верхнюю часть выпадающего списка (я использовал Combo0), оставив стрелку вниз видимой.

Кроме того, я установил свойства текстового поля для цвета Shape Outline, чтобы я мог ясно видеть, работает ли он. Для поля со списком - я также нажал Arrange - до Send To Back, чтобы он был скрыт за текстовым полем.

Всякий раз, когда ComboBox изменяется (щелкая его стрелкой), он также устанавливает значение textBox - которое можно установить на Гиперссылку, если вы хотите

1. Текстовое поле отображается, но стрелка поля со списком видна

Text Box Default

2. Стрелка поля со списком была нажата, чтобы показать выпадающий список

Combo Box Arrow

3. При нажатии на текстовое поле будет сгенерирован код в событии клика или гиперссылке

Clicked on text box

Пример формы VBA

Private Sub Combo0_AfterUpdate()
    Debug.Print "Updated"
    Text3 = Combo0.Value
    Text3.Visible = True
End Sub

Private Sub Combo0_Click()
    Debug.Print "Clicked"
    Text3.SetFocus
End Sub

Private Sub Combo0_Enter()
    Debug.Print "Enter: " & Combo0
    Text3.Visible = False
End Sub

Private Sub Form_Current()
    Text3 = Combo0.Value
    Text3.Visible = True
    Text3.SetFocus
End Sub
0 голосов
/ 04 мая 2018

Я провел быстрый тест, и он сработал, как и ожидалось:

Private Sub Combo14_Click()

Select Case Combo14
    Case Is = "Form1"
        DoCmd.OpenForm "Form1"
    Case Is = "Form2"
        DoCmd.OpenForm "Form2"
    Case Is = "Form3"
        DoCmd.OpenForm "Form3"
    Case Is = "Form4"
        DoCmd.OpenForm "Form4"
End Select

End Sub

Edit:

Попробуйте и тогда, в поле события GotFocus.

Private Sub Combo14_GotFocus()

Select Case Combo14
    Case Is = "Form1"
        DoCmd.OpenForm "Form1"
    Case Is = "Form2"
        DoCmd.OpenForm "Form2"
    Case Is = "Form3"
        DoCmd.OpenForm "Form3"
    Case Is = "Form4"
        DoCmd.OpenForm "Form4"
End Select

End Sub

Примечание: вы захотите переместить фокус на что-то другое в конце подпункта.

...