我是 Vb.net 2010 的新手。我使用的是 vb 6.0。谁能帮我将此代码转换为 vb.net 2010?
Dim SkeyBracket as ingeter
Dim xList As ListItem
If sKeyBracket <> 0 Then
Set xList = lvBracket.FindItem(CStr(sKeyBracket), lvwTag)
Else
Set xList = lvBracket.ListItems(1)
End If
我是 Vb.net 2010 的新手。我使用的是 vb 6.0。谁能帮我将此代码转换为 vb.net 2010?
Dim SkeyBracket as ingeter
Dim xList As ListItem
If sKeyBracket <> 0 Then
Set xList = lvBracket.FindItem(CStr(sKeyBracket), lvwTag)
Else
Set xList = lvBracket.ListItems(1)
End If
根据这个MSDN 链接(它讨论 VBA,但 VB6 非常相似),在查看 VB6ListView.FindItem
和 .netListViewFindItemWithText
方法的文档时,您需要更仔细地查看 VB6 代码的上下文以确定最合适的.
设置关键字。在 VBA 中,必须使用 Set 关键字来区分对象的赋值和对象的默认属性的赋值。由于 Visual Basic .NET 不支持默认属性,因此不需要且不再支持 Set 关键字。
所以在你的情况下,我会做类似的事情:
Dim SkeyBracket as integer
Dim xList As ListViewItem
If sKeyBracket <> 0 Then
xList = lvBracket.FindItem(CStr(sKeyBracket), lvwTag)
Else
xList = lvBracket.ListItems(1)
End If
你不走运,.Net 中的列表视图没有等效的方法。好消息是编写自己的代码相对简单。如果您只在一个地方使用它,则可以使用 LINQ 来执行此操作,而无需声明自己的方法,otoh 如果您经常使用它,那么扩展方法将允许您将其“添加”到 listview 类.
虽然ListView 类不包含 FindItem 方法或通过 ListItem 的 Tag 属性搜索的等效方法,但使用 LINQ 很容易做到等效(Cast 用于使列表项集合成为可枚举的)
lvBracket.Items.Cast(Of ListItem).FirstOrDefault(
Function(li) Object.Equals(li.Tag, CStr(sKeyBracket))
或使用VB 的空合并运算符(使用 2 个参数调用的运算符):
xList = If(lvBracket.Items.Cast(Of ListItem).FirstOrDefault(
Function(li) Object.Equals(li.Tag, CStr(sKeyBracket)),
lvBracket.Items(1))
虽然我真的怀疑你的意思是lvBracket.Items(0)
......
如果你想把它作为一种方法,那么扩展方法很容易编写:
Public Function FindByTag(this as ListView, tagStr as String) As ListItem
Return this.Items.Cast(Of ListItem).FirstOrDefault(
Function(li) CStr(li.Tag) = tagStr)
End Function
并用作lvBracket.FindByTag(CStr(sKeyBracket))