Réinitialiser une variable de type utilisateur [Résolu]

Signaler
Messages postés
61
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
29 août 2020
-
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
-
Bonjour
Existe-t-il une commande ou une façon simple de réinitialiser une variable de type utilisateur, sans être obligé de réinitialiser chaque sous-type de cette variable l'un après l'autre ?
(par exemple pour un tableau il y a l'instruction Erase, mais elle ne fonctionne qu'avec les tableaux... )
Je n'ai pas su trouver la réponse dans le forum ....

Merci

7 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
103
Salut,

Ok, je vois ce que tu veux dire.

Les types sont pratiques pour représenter un objet, mais sont très limité (et en effet, il n'est pas possible de réinitialiser le type facilement).

Je te conseille plutôt d'utiliser un module de classe qui fera la même chose que le type de données, mais qui te facilitera pas mal la tache :

Dans un module de classe nommé Polygone, tu déclare tes variables membres Public types As String
Public subtypes As String
Public offsets As String
Public header As Byte
Public colors() As Byte

Et ensuite, pour l'utiliser, il te suffit de créer une nouvelle instance de ce module de classe :
Dim tonPolygone As new Polygone

tonPolygone.types = "toto"
tonPolygone.subtypes = "tata"

'etc.

Et pour réinitialiser (pour remettre toutes les chaînes à vide) :
tonPolygone = new Polygone
______________________________________
DarK Sidious
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
103
Salut,

C'est quoi que t'appelle une "variable utilisateur" ??? Et que veux dire réinitialiser pour toi : remettre la variable à sa valeur d'origine ? Détruire l'instance d'un objet ? Vider une collection ?

La commande Erase fait bien plus que réinitialiser un tableau : elle le supprime !
______________________________________
DarK Sidious
Messages postés
61
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
29 août 2020

Merci de ta réponse
Désolé, je ne connais pas très bien le vocabulaire adéquat, alors je me suis mal exprimé.

J'ai créé un type de données , du style
Public Type Polygone
    types As String
    subtypes As String
    offsets As String
    header As Byte
    colors() As Byte
End Type

Ensuite j'ai déclaré une varaible de ce type
Public Polygone1 as Polygone

Mon programme utilise et remplit les éléments de cette variable Polygone1 , puis ensuite , j'aurais besoin de "réinitialiser" (ce n'est peut-être pas le bon terme ? ) cette variable polygone1 , pour qu'elle se vide et redevienne comme elle était au départ, juste après sa déclaration par l'instruction Dim.

Est-ce que je suis obligé de réinitialiser chaque élément un à un
Polygone1.types=""  
Polygone1.subtypes=""
...
Polygone1.header=0
Erase Polygone1.colors
etc...

ou peut-on le faire avec une seule commande, comme le fait Erase avec les tableaux ?
Erase ne supprime pas totalement le tableau : si c'est un tableau fixe , Erase réinitialise le tableau (remet les strings à "" , les nombres à 0 etc...) mais ne libère pas d'espace mémoire ; si c'est un tableau dynamique, Erase libère de l'espace mémoire , mais le tableau est toujours là , il suffit de le redimmensionner  à nouveau avec Redim.

J'ai  des variables de type défini par l'utilisateur avec beaucoup d'éléments , donc si il existe une commande pour les réinitialiser en une seule instruction , cela m'intéresserait.
Messages postés
61
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
29 août 2020

Merci Dark Sidious
C'est bien ce que je craignais pour les types de données.
Je vais donc utiliser les modules de classe.
Merci encore
Michel
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
Tu peux aussi faire comme ça :
Public Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" (ByRef Destination As Any, ByVal Length As Long)

Public Type T_Polygone
  types As String
  subtypes As String
  offsets As String
  header As Byte
  colors() As Byte
End Type

Private Sub TestPolygones()
  Dim Polygone As T_Polygone
  Polygone.types = "losange"
  Polygone.subtypes = "carré"
  offsets = "sais pas"
  header = 32768
  ZeroMemory polygones, Len(polygones)
End Sub , ----
[code.aspx?ID=41455 Colorisation syntaxique par Renfield]

_______________________________________________________________________
VB.NETis good ...VB6is better
Messages postés
61
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
29 août 2020

Merci [auteur/GHUYSMANS99/549970.aspx ] ghuysmans99 pour cette nouvelle méthode.

J'ai aussi essayé ceci :
Public Type Polygone
    types As String
    subtypes As String
    offsets As String
    header As Byte
    colors() As Byte
End Type

Puis déclaration d'un tableau à un seul élément
Public monPolygone()  as Polygone

Et là je peux utiliser Erase
Erase monPolygone

Tout est remis à 0 et il me suffit de faire un Redim pour réutiliser ma variable.

Ca a l'air de fonctionner ...
Qu'en pensez-vous ?
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
Connais pas Erase ...
Mais bon si ça fonctionne !
_______________________________________________________________________
VB.NETis good ...VB6is better