2011-02-04 3 views
0

J'essaye de faire corriger ma conversion d'une application VB6 à une application VB.net 2010. Tout s'est bien passé, mais pour quelques zone de liste déroulante NewIndex et OLE contrôle.Mise à niveau de VB6 vers .net NewIndex & OLE1

Voici les lignes de trouble qui ne pouvait pas sembler être convertis:

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

Si quelqu'un a des inciter à corriger ce problème, alors ce serait génial que je ne l'ai pas trouvé un moyen de contourner ces erreurs!

Merci!

David

+0

Obtient-on un message d'erreur de compilation ou un message d'exception d'exécution? Pouvez-vous poster le libellé exact des messages? – MarkJ

Répondre

1

C'est bizarre. Dans VB6 vous feriez ceci:

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

Ce fut une belle façon de stocker une chaîne dans une zone de liste, mais associer un ID de base de données avec elle.

Je suppose que votre routine VB6.SetItemData fait la même chose. Cependant, dans .NET cela ne fonctionnera pas. D'une part, les éléments des zones de liste dans VB6 sont basés sur 1 au lieu de 0, ce qui poserait probablement des problèmes, mais la zone de liste .NET n'a probablement pas de propriété .NewIndex. Une zone de liste n'a pas non plus une propriété de tableau ItemData.

La nouvelle façon de gérer est d'ajouter un objet entier et laisser la méthode .ToString dire la zone de liste pour afficher ce que (désolé pour C#, VB.Net mon est rouillé):

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

ajoutez simplement l'article:

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

Il affiche abc mais vous pouvez utiliser lstARCurrent.SelectedItem pour récupérer l'objet MyItem.

+0

Merci pour l'info là-bas, Scott! : o) – StealthRT