【发布时间】:2018-10-04 07:36:37
【问题描述】:
我正在用 Excel 编写一个 VBA 应用程序。我需要使用 ListView 控件,因为这似乎是对列表中显示的不同行使用不同颜色的唯一方法。我需要根据在 Listview 控件中选择的行类型来启用/禁用表单上的按钮。如果我使用鼠标单击行,这将完美运行 - 我有一个 Listview1_Click 例程,如下所示:
Private Sub Listview1_Click()
DeleteSelected.Enabled = False
EditSelected.Enabled = False
If comspec(Listview1.SelectedItem.Index) <> "HbA1c" Then
DeleteSelected.Enabled = True
EditSelected.Enabled = True
End If
End Sub
但是,如果我使用向上和向下箭头键,焦点似乎会在 ListView 控件中从一行移动到下一行,但当然按钮保持不变。我得出的结论是,解决此问题的唯一方法是禁用 ListView 控件中的箭头键。似乎没有捕获箭头键的 ListView 事件 - 我尝试使用 ListView1_KeyDown 如下:
Private Sub Listview1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal shift As Integer)
If KeyCode = vbKeyUp or KeyCode = vbKeyDown Then KeyCode = vbNull
End Sub
但它会引发编译错误 - 我认为 ListView 控件无法识别 KeyDown 事件。任何帮助将不胜感激。
非常感谢。
【问题讨论】:
-
鼠标、鼠标滚轮和tab键呢?他们不也影响这个吗?
-
鼠标滚轮不会影响任何东西,并且 Tab 键只是在表单中的不同控件周围导航(即从 ListView 到按钮然后再返回)。只是箭头键可能会导致这里出现问题。
-
ListView 和 TreeView 作为非内置 ActiveX 控件,不能在 64 位版本的 Office 中使用。附加提示:您可能希望在一篇有趣的文章MSForms All VBA TreeView 中看到JKP 的一个很好解释的替代方案,一个专业 应用程序开发者;虽然提供专业版,但重点放在使用类的免费演示版上。