【问题标题】:Upgrade VB6 to .net NewIndex & OLE1将 VB6 升级到 .net NewIndex & OLE1
【发布时间】:2011-02-04 13:28:42
【问题描述】:

我正在尝试修复从 VB6 应用程序到 VB.net 2010 应用程序的转换。一切都很顺利,除了一些 listbox NewIndexOLE 控件

以下是似乎无法转换的故障行:

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

如果有人愿意纠正这个问题,那就太好了,因为我还没有找到解决这些错误的方法!

谢谢!

大卫

【问题讨论】:

  • 您是否收到编译错误消息或运行时异常消息?你能发布任何消息的确切措辞吗?

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


【解决方案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 对象。

【讨论】:

  • 感谢您提供的信息,斯科特! :o)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
  • 2010-09-19
相关资源
最近更新 更多