1

我是 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
4

2 回答 2

0

根据这个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
于 2013-10-04T04:41:49.213 回答
0

你不走运,.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))

于 2013-10-04T05:03:25.530 回答