【问题标题】:vb.net Loop through Controls on Form and if ListView Loop through Columns and Rowsvb.net 循环遍历表单上的控件,如果 ListView 循环遍历列和行
【发布时间】:2015-03-04 18:43:51
【问题描述】:

我在一个用户窗体中有 3 个列表视图,还有一些其他项目。目前,当我展开 UserForm 时,ListViews 和其他项目会随着 UserForm 大小的增加而扩展。

我要做的也是通过循环浏览用户窗体上的所有控件并检查它是否为 ListView,然后循环浏览所有列并根据需要扩展来扩展 ListView 中的列的大小。

这是我目前所在的地方...

 For Each Ctrl As Control In Me.Controls
        If (TypeOf Ctrl Is ListView) Then
        ' This is where I'm not sure what to do!
        ' I want to loop through this Ctrl and view its columns
        End If
 Next

有人有什么想法吗?

【问题讨论】:

  • 下一步是将Ctrl 转换为ListView,以便您可以访问其属性。我想你可能可以从那里拿走它......
  • 你可能只需要myLV1.AutoResizeColumns(...) see also
  • @Cᴏʀʏ 我确实尝试过这样做...For Each ListColumns As ListView In Ctrl MsgBox(ListColumns) Next 但是 Ctrl 带有下划线,因为它需要更多东西。我试过Ctrl.Controls 但没有运气。我一定是在某个地方遗漏了什么,但我就是无法得到它!
  • @Plutonix 列是固定大小,不是自动调整大小,我不希望它们自动调整大小以适应内容,只是为了匹配页面的大小调整
  • @RichardC:请参阅我的答案,了解让 Ctrl 看起来像(转换为)ListView 的正确方法。

标签: vb.net listview


【解决方案1】:

如果 Plutonix 关于启用自动调整列大小的建议不起作用,请继续阅读...

要访问控件的属性,您需要先将其强制转换为ListView(到目前为止,您只检查了它是否 ListView。然后,您可以循环遍历行和列:

 For Each Ctrl As Control In Me.Controls
        If TypeOf Ctrl Is ListView Then
            Dim currentListView As ListView = DirectCast(Ctrl, ListView)
            ' Loop over the rows (items) in the view
            For Each item As ListViewItem In currentListView.Items

            Next
        End If
 Next

您最终可能还需要递归控件搜索 - 您当前的循环将仅查找属于 Me 的直接子级的控件。

另一个想法:只需在外部 for 循环中返回正确类型的控件:

For Each listViewControl As Control In Me.Controls.OfType(Of ListView)()
    For Each item As ListViewItem In listViewControl.Items

    Next
Next

【讨论】:

  • 这绝对是正确的!非常感谢,我从未见过 DirectCast 功能,以后会注意那个功能。现在一切都完美了,再次感谢
猜你喜欢
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多