【问题标题】:How can I know if there is no item selected in a listview?我如何知道列表视图中是否没有选择项目?
【发布时间】:2013-08-26 16:34:42
【问题描述】:

我在用户窗体中有一个删除按钮,可以从列表视图中删除所选项目。问题是当没有选择项目时(至少没有突出显示),它会删除第一个项目。我如何知道是否没有选择任何项目,从而避免删除任何内容?

这是我尝试过的,当没有选择任何内容时,它仍然会删除第一个项目。

Private Sub CommandButtonDelete_Click()
    If Not (ListView1.SelectedItem Is Nothing) Then
       ListView1.ListItems.Remove ListView1.SelectedItem.Index
   End If
End Sub

编辑:

问题似乎是总是有一个项目被选中。那么,新问题,当用户在 listView 之外单击时,如何取消选择该项目?

【问题讨论】:

  • 尝试“ListView1.SelectedItem = -1”而不是“ListView1.SelectedItem = Nothing”。我没有将此作为解决方案,因为我不确定它是否正确!但是,应该很快就可以尝试。
  • @jerussell 没有。问题似乎是总是有一个项目被选中。

标签: listview excel vba


【解决方案1】:

您可以取消选择项目,方法与确定是否未选择任何项目相同。

例如:

Me.ListBox1.ListIndex = -1

将取消选择在 ListBox1 中选择的任何内容。请注意,这是针对 ListBoxes 的,我没有使用过 ListViews,但我想这同样适用。当然,你需要把它放在某个地方。最简单的地方是将其放在Private Sub UserForm_Click() 中,但我不建议这样做,因为任何时候有人在选择后点击用户窗体都会清除选择。放置它的最佳位置是Private Sub ListBox1_Click(),然后确定被点击的那个是否已经被选中。在这种情况下,您编写代码以取消选择它...

确认这适用于 ListBoxes(不适用于 ListViews):

Private Sub CommandButton1_Click()
    If Not (Me.ListBox1.ListIndex = -1) Then
        Me.ListBox1.RemoveItem (Me.ListBox1.ListIndex)
    End If
End Sub

'Will unselect any selection when user clicks anywhere on the userform (but not on a control ON the userform)
Private Sub UserForm_Click()
    Me.ListBox1.ListIndex = -1
End Sub

Private Sub UserForm_Initialize()
    Me.ListBox1.AddItem "asdf"
    Me.ListBox1.AddItem "basdf"
End Sub

【讨论】:

  • 效果更好,但仍然不是预期的行为。如果您选择一个项目,然后单击表单另一部分的文本框,该项目将不再突出显示,但是当您单击删除时,它将删除该项目,因为它仍然处于选中状态(即使它没有突出显示) .我可以为表单的每个文本框、标签等编写那行代码,但这似乎不是最好的选择。
  • 您使用的是您在问题中发布的原始 IF THEN 语句还是我稍后建议的语句?我能够使用 ListBoxes 对其进行测试,并且在此代码中运行良好(编辑不佳)我也会将其放入我的答案中):Private Sub CommandButton1_Click() If Not (Me.ListBox1.ListIndex = -1) Then Me.ListBox1.RemoveItem (Me.ListBox1.ListIndex) End If End Sub Private Sub UserForm_Click() Me.ListBox1.ListIndex = -1 End Sub Private Sub UserForm_Initialize() Me.ListBox1.AddItem "asdf" Me.ListBox1.AddItem "basdf" End Sub
  • 是的,那行得通,问题是当用户点击一个控件时,该项目仍然被选中但高亮消失了,所以用户无法判断哪个项目将被删除点击删除。
  • 抱歉,我的代码示例没有看到这个问题。它要么是 ListBoxes 和 ListViews 之间的区别,要么是代码的区别。同样,您使用的是哪个 If 语句? If Not (ListView1.SelectedItem Is Nothing) Then 语句可能不正确,因为它永远不会是 Nothing。如果没有选择,那么它将是-1。
  • 我正在使用 ListView1.SelectedItem Is Nothing,它工作正常。而不是 ListBox1.ListIndex = -1 我使用 ListView1.SelectedItem = Nothing,取消选择它,我已经检查过。
猜你喜欢
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 2021-10-10
  • 2019-09-05
相关资源
最近更新 更多