2010-12-14 62 views
0

J'écris une DLL .NET pour parcourir tous les contrôles dans un formulaire VB6 passé parref.Comment trouver le type d'un contrôle VB6 dans VB.NET

Jusqu'à présent, il semble fonctionner le code VB.NET:

Public Sub AddFormRefLegacy(ByRef strAppName As String, ByRef objForm As Object) 

     'update the forms caption 
     objForm.Caption = FindValue(strAppName, objForm.Name, "", "0", objForm.Caption) 

     'iterate through all the controls on the form   
     For Each ctl As Object In objForm.Controls 
      if TypeOf ctl is Label then 
      'this doesn't pick up any labels 
      end if 
     Next 
    End Sub 

appelé de ce code VB6:

Dim libDD As New Lib.clsDataDictionary 
libDD.AddFormRefLegacy "nnne", Me 

mais l'opérateur TypeOf ne fonctionne pas. Y a-t-il un autre moyen de trouver le type de contrôle?

+0

Vous comparez des pommes et des oranges. La classe VB.NET Label est une classe .NET, le contrôle Label VB6 est un contrôle ActiveX. La seule approche possible est Marshal.GetIUnknownForObject + Marshal.QueryInterface mais les IID pour ces contrôles ne peuvent être obtenus nulle part que je connaisse. –

Répondre

1

Serait-ce que vous comparez deux objets de type "Label" différents.

Vous n'avez pas qualifié le type LABEL dans la ligne IF TYPEOF, vous pourriez donc comparer une étiquette VB6 à une étiquette .net, et ils ne seraient pas identiques.

Vous pouvez utiliser TYPENAME, mais ce n'est peut-être pas exactement ce dont vous avez besoin. Je m'assurerais que vous comparez vraiment les types que vous pensez comparer.

+0

Merci pour le point dans la bonne direction- Je comprends que je compare deux choses différentes, mais je voulais trouver un moyen de trouver le type VB6. TypeName fonctionne bien et je peux coder une instruction select pour travailler avec les types variés. Ma fonction ne concerne que les formulaires VB6 et j'en ai une autre pour traiter les fichiers .NET, donc le mélange des types n'est pas un problème - merci pour l'aide. – Matt

0

Avez-vous essayé d'utiliser la fonction TypeName? Cela retourne-t-il quelque chose d'utile pour TypeName (ctl)?

+0

Oui TypeName renvoie "Label" "Frame" "CommandButton", etc, donc cela fonctionne pour moi. – Matt