【问题标题】:Disable listview item in vb.net在 vb.net 中禁用列表视图项
【发布时间】:2018-04-08 13:26:09
【问题描述】:

我试图在我的列表视图中禁用项目(行),但它似乎没有像 .enable = false 这样的选项,我试图找到任何东西来通过禁用但可见来获取我的项目。有这样的吗?如果允许用户选择它,则启用该项目,否则它可见但未启用。

我在数据库中有一个表,管理员将填写它,用户可以查看或不查看窗口,所以我希望用户能够看到它,如果不允许查看它,则禁用它。

【问题讨论】:

  • 没有这样的东西,但 LV 可能是最常定制/扩展的控件。您可以找到许多版本,其中一些可能支持禁用项目。无论如何,LV 不适合这种事情 - 你可以对 DGV 做同样的事情,只需使用视图来使事物可见或不可见。
  • 你不能只处理SelectedIndexChanged 事件并取消选择所选项目,即Clear SelectedItems 集合,如果它是你想要“禁用”的集合吗?
  • 事实上,如果你只保留一个“禁用”项目的列表,你可以简单地在SelectedIndexChanged事件处理程序中循环遍历该列表并将每个的Selected属性设置为False .这将处理多选和单选场景。

标签: vb.net listview


【解决方案1】:

这仅在 MultiSelect 设置为 False 并且为每个项目设置了 .Tag 属性时才有效。 (是或否)。

Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged
        If Not ListView1.SelectedItems.Count = 0 Then
            Dim item As ListViewItem = ListView1.SelectedItems(0)
            If item.Tag.ToString = "No" Then
                item.Selected = False
            End If
        End If
End Sub

根据@jmcilhinney,以下代码应与 MultiSelect = True 一起使用。我试图访问添加到集合中的最后一个项目,但似乎 SelectedItems 集合的顺序与项目出现在 ListView 中的顺序相同;不像预期的那样,最后添加的项目将是集合中的最后一个..

Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged
        If Not ListView1.SelectedItems.Count = 0 Then
            For Each item As ListViewItem In ListView1.SelectedItems
                If item.Tag.ToString = "No" Then
                    item.Selected = False
                End If
            Next
        End If
End Sub

【讨论】:

  • 如果您循环使用 ItemsSelectedItems 并使用每个 Tag 而不仅仅是 @ 中的第一个 MultiSelect 设置为 True ,它将起作用987654328@。您甚至可以只测试 SelectedItems 中的最后一项,因为那将是刚刚选择的项。
  • @jmcilhinney 如您所述,我添加了与 MultiSelect 一起使用的代码,但在访问最后添加的项目时遇到了问题,正如我在编辑中解释的那样。感谢您的改进。
  • 最后一项是具有最后一个索引的项:ListView1.SelectedItems(ListView1.SelectedItems.Count - 1)。或者,使用Last 扩展方法:ListView1.SelectedItems.Cast(Of ListViewItem)().Last()。事实上,您也可以使用 LastOrDefault 并测试 Nothing 以取消您原来的 If 语句。
  • 试过ListView1.SelectedItems(ListView1.SelectedItems.Count - 1)First 但集合不是这样排序的。它的顺序与 Items Collection 相同。将尝试.Last
  • 啊,抱歉。我没有意识到这一点。我进行了测试,这似乎是我假设的方式,但我显然没有做足够的测试来证明这只是巧合。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
相关资源
最近更新 更多