Выпадающий список из Combobox - щелкните правой кнопкой мыши - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть ComboBox, и я хотел бы показать msgbox, когда пользователь использует RightClick для определенного элемента из выпадающего списка - без выбора этого элемента. Возможно ли это?

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

Мой код:

Private Sub ComboBox1_Mousedown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = xlSecondaryButton Then
        Select Case ComboBox1.Value
            Case Is = "1"
                MsgBox "Description of item1"
                ComboBox1.Value = ""
            Case Is = "2"
                MsgBox "Description of item2"
                ComboBox1.Value = ""
            Case Is = "3"
                MsgBox "Description of item2"
                ComboBox1.Value = ""
            Case Else
        End Select
    End If
    End Sub

1 Ответ

0 голосов
/ 30 апреля 2018

Хорошо, я думаю, что вижу, чего вы пытаетесь достичь.

К сожалению, нет, комбинированный список не работает так. Можно было бы использовать некоторую очень сложную обработку сообщений Win32, чтобы взломать ее, но в конце дня элементы управления ActiveX конфигурируются настолько, насколько они задуманы, и выпадающая часть выпадающего списка не собирается запустить событие для того, что вы пытаетесь сделать.

Ваши пользователи также не ожидают, что комбо-бокс будет вести себя таким же образом, поэтому реализация, которая привела бы к проблеме обнаружения UX / функций.

Это очень похоже на проблему XY: проблема real заключается в том, что вы хотите, чтобы у каждого выпадающего элемента было соответствующее описание, чтобы пользователь знал, что он собирается выбрать, прежде чем выбрать это.

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

Я не знаю, как вы заполняете свой комбинированный список, но если вы можете хранить свои данные (включая описания) в двухмерном массиве (вы можете получить их бесплатно, если данные поступают с рабочего листа Range) Вы можете настроить комбинированный список для отображения его элементов в 2 столбцах и даже скрыть бессмысленный для пользователя числовой код, если хотите:

Dim items
ReDim items(1 To 3, 1 To 2)
items(1, 1) = 1
items(1, 2) = "Description for Item 1"
items(2, 1) = 2
items(2, 2) = "Description for Item 2"
items(3, 1) = 3
items(3, 2) = "Description for Item 3"

ComboBox1.List = items
ComboBox1.ColumnCount = 2
'ComboBox1.ColumnWidths = "30,70"
ComboBox1.ColumnWidths = "0,70"

С ColumnWidths = "0,70" вы получите это:

userform combobox showing only descriptions

И с ColumnWidths = "30,70" вы получите это:

userform combobox showing codes and descriptions

* * * * * * * * * * * * * * * * * * * * * * * * *

в поле со списком будет тем, что содержится в первом столбце, даже если он скрыт: *1030*

label showing selected value in the combobox

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...