【问题标题】:Add MenuItems to a ContextMenuStrip from SubItems of a ListView从 ListView 的 SubItems 将 MenuItems 添加到 ContextMenuStrip
【发布时间】:2021-08-03 11:51:42
【问题描述】:

我的表单定义了一个 ContextMenuStrip:

Dim CMS As New ContextMenuStrip
Button1.ContextMenuStrip = CMS

还有一个包含 5 列和一些数据的 Listview:

ListView1.View = View.Details

如何在 ContextMenuStrip 中显示此 ListView 的第一个 5 项目的索引 1 和 K 的子项目的内容?

CMS.Items.Clear()
For i As Integer = 0 To 5
    Dim line As String = ListView1.Items(i).SubItems(1).Text
    Dim line1 As String = ListView1.Items(i).SubItems(3).Text
    CMS.Items.Add(line & "|" & line1)
Next i

如果 ListView 包含的数量少于 5 ListViewItems,则会出现异常。
如果ListView中有一个ListViewItem,则创建一个MenuItem。
如果 ListViewItem 超过 5 个,则仅显示前 5 个 Item 的值。

【问题讨论】:

    标签: vb.net winforms listview contextmenustrip


    【解决方案1】:

    您可以用不同的方式定义值的区间。
    使用 Math 类的 Min/Max 方法可能很简单,它可以适应不同的场景。就个人而言,我经常使用它来验证属性的最大值和最小值(例如,您有一个类型为 Byte 的属性,因此您可能只想接受介于 0255 之间的值)。

    • 您希望从 ListView 的第一个 5 项的子项中检索值。这是Max() 值。
    • 元素的最小数量Items集合的内容决定。可能是0:在这种情况下,我们不想迭代该集合,因为它没有什么可以回馈的。所以,0Min()
    • 我们需要考虑这些集合的索引器从0开始。

    那么值的范围是:

    Math.Max(Math.Min([Items Number], 5), 0) - 1
    

    -1 因为我们从0 开始:如果我们想要最大5 个值,我们从0 迭代到(5 - 1),如果Items 集合有0 元素,我们从0 迭代到(0 - 1),所以我们根本不迭代集合(循环立即终止)。

    您可以将循环重写为:

    For i As Integer = 0 To Math.Max(Math.Min(ListView1.Items.Count, 5), 0) - 1
        Dim line As String = ListView1.Items(i).SubItems(1).Text
        Dim line1 As String = ListView1.Items(i).SubItems(3).Text
        CMS.Items.Add(line & "|" & line1)
    Next i
    

    【讨论】:

    • 但是不告诉我如何获取最后5条记录?
    • 您要求获得第一个 5 项:您的问题是如果超过 5 行,则仅显示前 5 行
    猜你喜欢
    • 2011-06-08
    • 2021-05-08
    • 2018-08-14
    • 2013-11-28
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多