vba - 来自组合框的下拉菜单 - 右键单击
问题描述
我有一个 ComboBox,我想显示一个 msgbox,当用户在下拉列表中的特定项目上使用 RightClick 时 - 不选择此项目。可能吗?
它不按我的意愿工作。此 msgbox 仅显示所选项目,但我会从下拉列表级别为每个项目显示此 msgbox,而不选择此项目且不折叠整个下拉列表。
我的代码:
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
解决方案
好的,我想我看到了您要实现的目标。
不幸的是,不,组合框不能那样工作。您可以想象使用一些非常复杂的 Win32 消息处理来破解它,但归根结底,ActiveX 控件只能按照设计的方式进行配置,并且组合框的“下拉”部分不会为您正在尝试做的事情触发一个事件。
您的用户也不会期望组合框以这种方式运行 - 因此实现它会引入 UX / 功能可发现性问题。
这感觉很像一个 XY 问题:真正的问题是您希望每个下拉项都有关联的描述,以便用户在选择之前知道他们将要选择的内容。
事实证明,组合框可以本地执行此操作。
我不知道你是如何填充你的组合框的,但是如果你可以将你的数据(包括描述)放在一个二维数组中(如果数据来自工作表,你可以免费获得一个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"
这个:
和ColumnWidths = "30,70"
你一起得到这个:
组合框的.Value
将是第一列包含的任何内容,即使它是隐藏的:
推荐阅读
- c# - 无法观看 Dictionary 的 linq 扩展方法
在统一 - reactjs - 如何检查路由是否处于活动状态?
- synchronization - GlusterFS 复制卷的数据同步被 remove-brick 中止
- java - 无法使用 v6.18+ 构建 JXBrowser jar
- javascript - 在 Javascript 中进行基本年龄检查时遇到问题
- typescript - 如何声明 TypeScript 接口,其中属性名称是数组中的值
- javascript - 在javascript中返回匹配字符串的数组
- django - 使用 Count 进行注释会使用 NullBooleanField 产生不正确的值
- java - 如何使用 Java 通过 HmacSHA256 加密 Json
- javascript - 使用 request-promise 获取 github url 返回 404