Обновите VB6 до .net NewIndex & OLE1 - PullRequest
0 голосов
/ 04 февраля 2011

Я пытаюсь исправить мое преобразование из приложения VB6 в приложение VB.net 2010. Все прошло хорошо, за исключением списка с несколькими слоями NewIndex и OLE control .

Ниже приведены строки проблем, которые не могут быть преобразованы:

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

Если у кого-нибудь есть причины, чтобы исправить эту проблему, то это было бы здорово, поскольку я не нашел способа обойти эти ошибки!

Спасибо!

David

1 Ответ

1 голос
/ 05 февраля 2011

Странно.В VB6 вы могли бы сделать это:

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

Это был хороший способ сохранить строку в поле списка, но связать с ней идентификатор базы данных.

Я предполагаю, что 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объект. * * тысяча двадцать-один

...