Question

Comment obtenir le type (le nom sous forme de chaîne suffit) d'un objet en VB6 au moment de l'exécution ?

c'est à dire.quelque chose comme:

If Typeof(foobar) = "CommandButton" Then ...

/MODIFIER: pour clarifier, je dois vérifier les objets typés dynamiquement.Un exemple:

Dim y As Object 

Set y = CreateObject("SomeType")

Debug.Print( <The type name of> y)

Où la sortie serait "CommandButton"

Était-ce utile?

La solution

Je pense que ce que vous recherchez est TypeName plutôt que TypeOf.

If TypeName(foobar) = "CommandButton" Then
   DoSomething
End If

Modifier:Que voulez-vous dire par objets dynamiques ?Voulez-vous dire des objets créés avec CreateObject (""), car cela devrait encore fonctionner.

Modifier:

Private Sub Command1_Click()
    Dim oObject As Object
    Set oObject = CreateObject("Scripting.FileSystemObject")
    Debug.Print "Object Type: " & TypeName(oObject)
End Sub

Les sorties

Object Type: FileSystemObject

Autres conseils

TypeName est ce que vous voulez...Voici un exemple de sortie :

Code VB6 :

Private Sub cmdCommand1_Click()
Dim a As Variant
Dim b As Variant
Dim c As Object
Dim d As Object
Dim e As Boolean

a = ""
b = 3
Set c = Me.cmdCommand1
Set d = CreateObject("Project1.Class1")
e = False

Debug.Print TypeName(a)
Debug.Print TypeName(b)
Debug.Print TypeName(c)
Debug.Print TypeName(d)
Debug.Print TypeName(e)
End Sub

Résultats:

String
Integer
CommandButton
Class1
Boolean

Je n'ai pas de copie de VB6 sous la main, mais je pense que vous avez besoin du

Typename()

fonction...Je peux le voir dans Excel VBA, donc c'est probablement dans le même runtime.Fait intéressant, l'aide semble suggérer que cela ne devrait pas fonctionner pour un type défini par l'utilisateur, mais c'est à peu près la seule façon pour moi de le faire. faire utilise le.

Extrait du fichier d'aide :

Fonction TypeName

Renvoie une chaîne qui fournit des informations sur une variable.

Syntaxe

TypeName(varname)

L'argument Varname requis est une variante contenant n'importe quelle variable sauf une variable d'un type défini par l'utilisateur.

Cela devrait s'avérer difficile, puisque dans VB6 tous les objets sont COM (IDispatch) des choses.Ils ne sont donc qu'une interface.

TypeOf(object) is class ne fait probablement qu'un appel COM get_interface (j'ai oublié le nom exact de la méthode, désolé).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top