【问题标题】:vb.net listview equivalent to VB6 listindexvb.net listview 等效于 VB6 listindex
【发布时间】:2011-02-16 04:54:01
【问题描述】:

我正在尝试让以下 VB6 listindex 在我的 vb.net 代码中工作:

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

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

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

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

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

当我将项目添加到列表视图时,我会这样做:

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 中的列表视图,因为上面是列表框而不是列表视图。 .net 中是否有等效的列表框具有自定义索引?

任何帮助都会很棒!

大卫

【问题讨论】:

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


    【解决方案1】:

    试试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)
    

    【讨论】:

      【解决方案2】:

      假设我没看错,你正在做许多 VB6 程序员所做的事情。您在 ItemData 字段中存储了一个不是索引但与项目相关的相关值。 VB6 中很常见的做法。

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

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

      【讨论】:

        猜你喜欢
        • 2014-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多