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

cs_youyou40 58 Messages postés lundi 20 décembre 2004Date d'inscription 3 janvier 2017 Dernière intervention - 12 juil. 2008 à 12:41 - Dernière réponse : cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention
- 13 juil. 2008 à 22:36
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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 12 juil. 2008 à 16:07
3
Merci
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

Merci cs_DARKSIDIOUS 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 12 juil. 2008 à 12:55
0
Merci
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
Commenter la réponse de cs_DARKSIDIOUS
cs_youyou40 58 Messages postés lundi 20 décembre 2004Date d'inscription 3 janvier 2017 Dernière intervention - 12 juil. 2008 à 15:56
0
Merci
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.
Commenter la réponse de cs_youyou40
cs_youyou40 58 Messages postés lundi 20 décembre 2004Date d'inscription 3 janvier 2017 Dernière intervention - 12 juil. 2008 à 20:36
0
Merci
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
Commenter la réponse de cs_youyou40
cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 13 juil. 2008 à 09:51
0
Merci
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
Commenter la réponse de cs_ghuysmans99
cs_youyou40 58 Messages postés lundi 20 décembre 2004Date d'inscription 3 janvier 2017 Dernière intervention - 13 juil. 2008 à 12:02
0
Merci
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 ?
Commenter la réponse de cs_youyou40
cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 13 juil. 2008 à 22:36
0
Merci
Connais pas Erase ...
Mais bon si ça fonctionne !
_______________________________________________________________________
VB.NETis good ...VB6is better
Commenter la réponse de cs_ghuysmans99

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.