2011-02-15 43 views
1

我試圖得到以下VB6 LISTINDEX到我的vb.net代碼內工作: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的值(這是它需要返回)

當我將項目添加到列表視圖我這樣做:

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中是否有與.net類似的列表框以使用自定義索引?

任何幫助將是偉大的!

大衛

回答

2

嘗試strContract = lstPayRequest.FocusedItem.Index
你正在使用它的是,指數在返回的項目的方式

編輯:
要回答你的問題,你可以子項目添加到ListViewItem的,或者你可以使用您的自定義索引的ListViewItem的標籤屬性。

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

謝謝你,馬克。 .tag工作得很好:o) – StealthRT 2011-02-16 13:00:01

0

假設我讀過這篇文章,你正在做許多VB6程序員做的事情。您將相關值存儲在不是索引但與項目相關的ItemData字段中。在VB6中很常見的做法。

不幸的是,這種做法不直接支持VB.NET。 VB.NET列表框沒有ItemData的概念,因此不能直接轉換VB6代碼。我遇到的唯一解決方案是基於ListViewItem類創建一個類。它可以具有顯示名稱和項目數據屬性。然後,當您將項目添加到列表中時,您將創建自定義項目類,填充屬性並將該實例添加到列表中。然後,您可以通過將選定項目投射到您的自定義項目類中來檢索項目數據值。

複製內置的VB6功能有很多工作,但這是我見過的唯一選項。希望有人對這個問題有更好的答案,我也會學習。