Сделать единицы видимыми при вставке в текстовое поле или комбинированный список - PullRequest
0 голосов
/ 28 августа 2018

enter image description here У меня есть пользовательская форма, которая требует ввода в различные текстовые поля и комбинированные списки. Входы предназначены для измерений и имеют связанные с ними единицы измерения. Я хочу, чтобы пользовательская форма отображала, какие единицы измерения будут использоваться при нажатии на каждый конкретный текст / комбинированный список.

В настоящее время мой код работает с текстовыми полями, но не распознает комбинированные списки. Вот мой код

Private Sub TextboxActions_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If InStr(1, TextboxActions.Name, "OD") > 0 Then
    UserForm1.inUnit.Visible = True
    UserForm1.mmUnit.Visible = False
    UserForm1.eaUnit.Visible = False

ElseIf InStr(1, TextboxActions.Name, "CE") > 0 Then
    UserForm1.inUnit.Visible = False
    UserForm1.mmUnit.Visible = True
    UserForm1.eaUnit.Visible = False

Else
    UserForm1.inUnit.Visible = False
    UserForm1.mmUnit.Visible = False
    UserForm1.eaUnit.Visible = True
End If
End Sub

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

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Использование 3 Enter() событий сработало для меня:

Private Sub ComboBox1_Enter()

UserForm1.Label1.Visible = True
UserForm1.Label2.Visible = False
UserForm1.Label3.Visible = False

End Sub
Private Sub ComboBox2_Enter()

UserForm1.Label1.Visible = False
UserForm1.Label2.Visible = True
UserForm1.Label3.Visible = False

End Sub
Private Sub ComboBox3_Enter()

UserForm1.Label1.Visible = False
UserForm1.Label2.Visible = False
UserForm1.Label3.Visible = True

End Sub

Пример нажатия в комбинированных списках (в верхней пользовательской форме ComboBox1 активен, во второй пользовательской форме ComboBox3 активен и т. Д.)

img

0 голосов
/ 28 августа 2018

Во-первых, я бы использовал событие Enter вместо события Mouse up, поэтому то же самое произойдет, когда вы перейдете в элемент управления. Для каждого события Enter элемента управления просто вызовите эту функцию ShowUnit и введите имя элемента управления.

Private Sub CE2_Enter()
    Call ShowUnit(CE2)
End Sub

Private Sub OD1_Enter()
    Call ShowUnit(OD1)
End Sub

Private Sub ShowUnit(ByRef oControl As Control)
    If InStr(1, oControl.Name, "OD") > 0 Then
        UserForm1.inUnit.Visible = True
        UserForm1.mmUnit.Visible = False
        UserForm1.eaUnit.Visible = False

    ElseIf InStr(1, oControl.Name, "CE") > 0 Then
        UserForm1.inUnit.Visible = False
        UserForm1.mmUnit.Visible = True
        UserForm1.eaUnit.Visible = False

    Else
        UserForm1.inUnit.Visible = False
        UserForm1.mmUnit.Visible = False
        UserForm1.eaUnit.Visible = True
    End If
End Sub

edit: Изменены имена элементов управления, чтобы проиллюстрировать, как использовать код, и возвращенные «OD» и «CE» в функциях instr() из моих тестовых значений.

Для получения дополнительной информации см. Изображение ниже, чтобы увидеть, что происходит. Синий - это то, как вы можете использовать графический интерфейс, чтобы убедиться, что вы ссылаетесь на событие Controls. Красный цвет означает, что мы передаем полный контроль функции ShowUnit. Фиолетовый показывает, что мы читаем свойство Controls Name для поиска «OD» или «CE», отметим, что они чувствительны к регистру без использования instr(1, UCASE(oControl.Name), "OD") > 0, поэтому, если ваше имя элемента управления odSomeName, оно не будет иметь метку inUnit виден.

enter image description here

...