【问题标题】:Hide DropDown list for ComboBox without losing focus隐藏 ComboBox 的下拉列表而不失去焦点
【发布时间】:2018-03-13 17:30:27
【问题描述】:

我创建了一个类似于谷歌搜索的用户表单。我希望下拉菜单根据值的字母数显示/隐藏。

像这样..

If Len(ComboBox1.Value) > 4 Then
    ComboBox1.DropDown
Else
    'ComboBox.DroppedDown = False  (non-existent method)
End If

这个问题有很多版本,大多数都会改变焦点,但这应该在输入框时发生。我很难相信这是不可能的..

编辑:问题涉及隐藏下面的列表,而不是侧面的箭头 - 因为它设置为始终隐藏 - 列表应根据值的长度隐藏/取消隐藏。

【问题讨论】:

  • 你的意思是向下箭头吗?
  • FWIW 该评论应该写成(damn you, ActiveX!) - VBA 语言本身与 MSForms 控件自定义的限制程度无关。
  • 好点!! ^^你是对的。不,不是向下箭头,下面出现的列表

标签: vba excel combobox


【解决方案1】:

我能得到的最接近的是这个,但由于某种原因,如果你删除字符,它不会更新。另外,它只有在超过 5 个字符时才开始工作!编辑 - 根据 Mistella 的 cmets 进行修改。

Private Sub ComboBox1_Change()

If Len(Me.ComboBox1.Value) > 3 Then
    Me.ComboBox1.ShowDropButtonWhen = fmShowDropButtonWhenAlways
Else
    Me.ComboBox1.ShowDropButtonWhen = fmShowDropButtonWhenNever
End If

End Sub


Private Sub UserForm_Initialize()

With Me.ComboBox1
    .AddItem "A"
    .AddItem "B"
    .AddItem "C"
    .AddItem "D"
    .ShowDropButtonWhen = fmShowDropButtonWhenNever
End With

End Sub

【讨论】:

  • 退格和删除按钮可以在ComboBox1_KeyDown 事件中观察到——它们的效果不会滚动到_KeyPress 事件中。要在删除字符时进行更新,您必须将代码从 _KeyPress 复制到 _KeyDown --- 或者只需将代码添加到 ComboBox1_Change 事件...
  • 另外,由于代码在_KeyPress 事件中,正在查看的.Value文本更新之前。
  • @Mistella - 感谢 cmets,Change 事件似乎也能正常工作。
  • 非常感谢您的帮助,我已经更新了问题以指定这是下拉菜单本身,而不是箭头按钮
  • 你试过代码了吗?您应该只看到一个文本框,直到 4 个字符,然后出现下拉菜单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多