【问题标题】:How to disable arrow keys in ListView control in VBA with Excel如何使用 Excel 在 VBA 中禁用 ListView 控件中的箭头键
【发布时间】: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 的一个很好解释的替代方案,一个专业 应用程序开发者;虽然提供专业版,但重点放在使用类的免费演示版上。

标签: excel vba listview


【解决方案1】:

我认为这是 vba keydown 函数的正确签名。

它与那个签名一起工作:

Private Sub ListView1_KeyDown(KeyCode As Integer, ByVal Shift As Integer)
If KeyCode = vbKeyUp Or KeyCode = vbKeyLeft Or KeyCode = vbKeyDown Or KeyCode = vbKeyRight Then KeyCode = vbNull
End Sub

【讨论】:

  • 完美 - 非常感谢您的帮助,现在可以使用了!
猜你喜欢
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多