2011-02-04 7 views
0

私は、VB6.0アプリケーションからVB.net 2010アプリケーションへの変換を修正しようとしています。すべてがうまくいったが、少数の袖についてリストボックスNewIndexOLEコントロールVB6を.net NewIndexとOLE1にアップグレードします。

以下は変換されているように見えることができなかったトラブル線である:

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

誰もがこの問題を修正するための任意のINCITEを持っている場合、私はこれらのエラーを回避する方法を発見していないとして、その後、それは素晴らしいことです!

ありがとうございます!

デビッド

+0

コンパイルエラーメッセージまたはランタイム例外メッセージが表示されますか?あなたはどんなメッセージの正確な文言を投稿することができますか? – MarkJ

答えて

1

これは奇妙です。 VB6では、次のようにします:

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

これは、文字列をリストボックスに格納するが、データベースIDをそれに関連付けるうえで便利でした。

あなたのVB6.SetItemDataルーチンは同じことをやっていると仮定します。しかし、.NETでは動作しません。 VB6のリストボックスの項目は、0ベースではなく1ベースなので、問題が発生する可能性がありますが、.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が表示されますが、あなたはMyItemオブジェクトを取り戻すためにlstARCurrent.SelectedItemを使用することができます。

+0

そこの情報をありがとう、スコット! :o) – StealthRT

関連する問題