将VB6升级到.net NewIndex& OLE1

时间:2011-02-04 13:28:42

标签: vb.net visual-studio-2010 vb6 ole vb6-migration

我正在尝试将我的转换从VB6应用程序修复到VB.net 2010应用程序。一切顺利但是只有几个列表框NewIndex OLE控件

以下是无法转换的问题行:

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

如果有人有任何煽动纠正这个问题,那么这将是很好的,因为我没有找到解决这些错误的方法!

谢谢!

大卫

1 个答案:

答案 0 :(得分: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个对象。