vb.net listview相当于VB6 listindex

时间:2011-02-15 19:02:32

标签: vb.net visual-studio-2008 listview

我想在我的vb.net代码中使用以下VB6 listindex:

setTheR CStr(payReq.ItemData(payReq.ListIndex))

但如果我将其复制并粘贴到VB.net中,它就不会接受它。

这就是VB.net将VB6转换为.net代码所做的事情:

strContract = payReq.Items.Item(payReq.FocusedItem.Index).Text

但是,检查该值会返回名称而不是索引。而VB6代码返回值2311(这是它需要返回的值)

当我向listview添加项目时,我这样做:

Item = payReq.Items.Add(rsPayRequests.Fields("userid").Value)
Item.SubItems.Insert(1, New System.Windows.Forms.ListViewItem.ListViewSubItem(Nothing,   VB6.Format(rsPayRequests.Fields("reqdatetime").Value, "mm/dd/yyyy")))

但我注意到它也是这样做的:

payReq.Items.Add(New VB6.ListBoxItem(Item, rsPayRequests.Fields("requestNum").Value))

但这不适用于.net中的listview,因为上面是列表框而不是列表视图。列表框中的.net是否有等效的自定义索引?

任何帮助都会很棒!

大卫

2 个答案:

答案 0 :(得分:2)

尝试strContract = lstPayRequest.FocusedItem.Index
您使用它的方式是返回该索引处的项目

编辑:
要回答您的问题,您可以将子项添加到listviewitem,也可以使用ListViewItem的tag属性作为自定义索引。

    Dim lv As New ListViewItem
    lv.Text = "Item1"
    lv.Tag = 1001     
    lv.SubItems.Add("SubItem1")
    lv.SubItems.Add("SubItem2")
    lstPayRequests.Items.Add(lv)

答案 1 :(得分:0)

假设我已经读过这个,你正在做许多VB6程序员所做的事情。您将相关值存储在ItemData字段中,该字段不是索引但与项目相关。在VB6中非常常见。

不幸的是,VB.NET并不直接支持这种做法。 VB.NET列表框没有ItemData的概念,因此无法直接转换VB6代码。我遇到的唯一解决方案是基于ListViewItem类创建一个类。它可以具有显示名称和项目数据属性。然后,当您向列表中添加项目时,您将创建自定义项目类,填充属性并将该实例添加到列表中。然后,您可以通过将所选项目强制转换为自定义项目类来检索项目数据值。

复制内置VB6功能需要做很多工作,但这是我见过的唯一选择。希望有人对这个问题有更好的答案,我也会学到。