2008-09-09 16 views
6

Comment obtenir le type (le nom en tant que chaîne est suffisant) d'un objet dans VB6 lors de l'exécution?VB6 Runtime Type Retrieval

dire quelque chose comme:

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

/EDIT: pour clarifier, je dois vérifier sur les objets Typé dynamiquement. Un exemple:

Dim y As Object 

Set y = CreateObject("SomeType") 

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

Lorsque la sortie serait "CommandButton"

Répondre

8

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

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

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

Edit:

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

Sorties

Object Type: FileSystemObject

+0

Peut-être que je devrais préciser ma question, je veux savoir ce qu'est un objet dynamique tapé est, donc l'utilisation TypeName sera (dans mon cas) seulement retourner "Object". – DAC

0

Cela devrait se révéler difficile, car dans VB6 tous les objets sont des choses COM (IDispatch). Ainsi, ils ne sont 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é).

2

Je n'ai pas une copie de VB6 à 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 temps d'exécution. 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 dont je l'utilise .

Extrait du fichier d'aide:

TypeName Fonction

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

Syntaxe

TypeName (varname)

L'argument varname requis est un Variant contenant une variable sauf une variable d'un type défini par l'utilisateur.

2

TypeName est ce que vous voulez ...Voici quelques 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