2009-12-04 6 views
1

Existe-t-il un moyen de demander une propriété de contrôle dans une boucle?Propriétés du contrôle dans Visual Basic 6

J'ai besoin somethig comme ceci:

For each p in control.properties 
    if p = "Value" then 
     msgbox "I Have Value Property" 
    elseif p = "Caption" then 
     msgbox "I Have Caption Property" 
    end if 
next 

Cela pourrait se faire en quelque sorte?

+0

Comme une note de côté, l'un des principaux avantages de VB.NET est que tous les contrôles ont un '. Propriété Text' au lieu de 'Caption' ou' Value'. – Powerlord

Répondre

5

Trouvé ce code sur Experts Exchange. Ajouter une référence à TypeLib Information.

Public Enum EPType 
    ReadableProperties = 2 
    WriteableProperties = 4 
End Enum 

Public Function EnumerateProperties(pObject As Object, pType As EPType) As Variant 
    Dim rArray() As String 
    Dim iVal As Long 
    Dim TypeLib As TLI.InterfaceInfo 
    Dim Prop As TLI.MemberInfo 
    On Error Resume Next 
    ReDim rArray(0) As String 
    Set TypeLib = TLI.InterfaceInfoFromObject(pObject) 
    For Each Prop In TypeLib.Members 
     If Prop.InvokeKind = pType Then 
      iVal = UBound(rArray) 
      rArray(iVal) = UCase$(Prop.Name) 
      ReDim Preserve rArray(iVal + 1) As String 
     End If 
    Next 
    ReDim Preserve rArray(UBound(rArray) - 1) As String 
    EnumerateProperties = rArray 
End Function 

Vous pouvez demander une liste des propriétés lisibles ou inscriptibles.

Bonus, demandez si une propriété spécifique existe.

Public Function DoesPropertyExist(pObject As Object, ByVal _ 
    PropertyName As String, pType As EPType) As Boolean 
    Dim Item As Variant 
    PropertyName = UCase$(PropertyName) 
    For Each Item In EnumerateProperties(pObject, pType) 
     If Item = PropertyName Then 
      DoesPropertyExist = True 
      Exit For 
     End If 
    Next 
End Function 
+0

+1. Il y a aussi du code sympa avec ça ici http://stackoverflow.com/questions/547903/self-inspection-of-vb6-udts/550059#550059 – MarkJ

0

Je ne suis pas sûr de ce que vous espérez accomplir, mais je suis sûr que VB6 ne supporte pas ce dont vous parlez. Vous pouvez essayer quelque chose comme ceci:

If control.Value Is Not Nothing Then 
    msgbox "I Have Value Property" 
Else If control.Caption Is Not Nothing Then 
    msgbox "I Have Caption Property" 

Voir si cela accomplit ce que vous cherchez à faire.

+1

qui planterait – Fredou

+0

En fait, je n'étais même pas sûr qu'il compilerait. J'ai toujours trouvé plus utile que "Désolé, vous êtes foutu." – iandisme

2

Beaner a donné un excellent direct answer à la question que vous avez posée.

Je devine ce que vous pourriez essayer de faire. Peut-être que vous essayez d'obtenir le "texte" d'un contrôle mais vous ne connaissez pas le type du contrôle à l'exécution. Vous pourriez envisager quelque chose comme ceci, qui essaye un certain nombre de noms de propriétés codés en dur jusqu'à ce que quelque chose fonctionne. Une autre approche consisterait à vérifier le type de contrôle au moment de l'exécution. Vous pouvez utiliser

Ensuite, vous pouvez passer au code pour les types spécifiques de contrôle qui ont certainement la propriété Text, etc.

Questions connexes