2011-02-04 84 views
0

我試圖將我的轉換從VB6應用程序修復爲VB.net 2010應用程序。一切都很順利,但幾次睡眠listbox NewIndexOLE控件將VB6升級爲.net NewIndex&OLE1

下面是麻煩線似乎不能轉換:

VB6.SetItemData(lstARCurrent, lstARCurrent.NewIndex, (.Fields("approval_s").Value)) 
OLE1.CreateLink(strFileName) 
OLE1.DoVerb(vbOLEOpen) 

如果任何人有任何煽動糾正這個問題,那麼我還沒有找到解決這些錯誤的方式,將是巨大的!

謝謝!

大衛

+0

您是否收到編譯錯誤消息或運行時異常消息?你能發表任何消息的確切措詞嗎? – MarkJ 2011-02-04 14:35:07

回答

1

這很奇怪。在VB6中,你會這樣做:

lstARCurrent.Add(someString) 
lstARCurrent.ItemData(lstARCurrent.NewIndex) = myLongKey 

這是將字符串存儲到列表框但將數據庫ID與其關聯的一種很好的方法。

我假設你的VB6.SetItemData例程是做同樣的事情。但是,在.NET中不起作用。首先,VB6中的列表框中的項目是基於1而不是基於0的,因此可能會導致問題,但.NET列表框最有可能不具有.NewIndex屬性。列表框沒有ItemData數組屬性。

來處理這種新的方法是添加一個完整的對象,並讓.ToString方法告訴列表框中顯示什麼(對於C#對不起,我的VB.Net是生鏽):

class MyItem 
{ 
    public int MyKey { get; set; } 
    public string MyStringValue { get; set; } 
    public override string ToString() 
    { 
     return this.MyStringValue; 
    } 
} 

然後只需添加項目:

lstARCurrent.Items.Add(new MyItem() { MyKey = 3, MyStringValue = "abc" }); 

它會顯示abc但你可以使用lstARCurrent.SelectedItem找回MyItem對象。

+0

感謝那裏的信息,斯科特! :O) – StealthRT 2011-02-07 12:54:13