Variables en objet

cs_Hobby Messages postés 116 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 17 septembre 2008 - 22 juin 2004 à 12:51
cs_Hobby Messages postés 116 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 17 septembre 2008 - 23 juin 2004 à 23:49
Bonjour,

Cela fait presque deux ans que je 'fait' du VB et je me rend compte que j'ai jamais fait mon propre objet.
J'ai commencé un petit soft, mais je me retrouve avec une quantité colosale de variable public.

Donc mon Id est de faire un objet, puisque la majorité des variable stock des paramêtres qui sont des propriétés..
Pour exemple:
Objet est: composant
Je vourait faire des propriété de 'composant':
Donc composant comporte des sections:
composant.section1
La 'section1' comporte
composant.section1.Auteur (string)
composant.section1.Société (string)
composant.section1.Police (string)
composant.section1.Police.taille (long)
composant.section2
composant.section2.Champ(1).Nom (string)
composant.section2.Champ(1).type(Long)

Donc ce dernier cas, je dois pouvoir avoir un index, parceque j'ai 4 champs qui on exactement les même sous propriété.

J'ai fait une recherche dans les tutoriaux et rien trouvé de génial.

Petite info suplémentaire. Je n'utiliserai qu'un seul objet déclaré en public, j'edit un seul composant a la fois.
Merci
Olivier

15 réponses

Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
22 juin 2004 à 13:03
Tu pourrais faire un truc avec des types, ça me paraît plus facile. Un truc du genre :

Public Type Section1
Auteur as string
Société As String
FontS As font
'...etc...
End Type

Public Type ChampS
Nom As String
Type As String
End Type

Public Type Section2
Champ As ChampS
End Type

Public Type Composant
Sc1 As Section1
Sc2 As Section2
End Type

Public MonComposant As Composant

Voilà....
@+, et ésite pas à reposer ta question si c pas c que tu voulais.
Scalpweb


Pice-WCorp bientôt sur le net.
0
cs_Warning Messages postés 516 Date d'inscription samedi 3 février 2001 Statut Membre Dernière intervention 24 octobre 2006 2
22 juin 2004 à 13:21
plutot que des "type" je te conseil de créer des modules de classe... C comme des usercontrols sans interfaces... Ainsi tu peux gerer tout type d'objets et de "sous objets" et de propriétés et de fonctions ...

Mail:ASC.Warning@caramail.com
Website: http://www.hexorciser.fr.st/

Warning
0
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
22 juin 2004 à 13:27
Oui, c vrai, jy avais pas pensé sur le coup.
je vais aller voir ton site.

Pice-WCorp bientôt sur le net.
0
cs_Hobby Messages postés 116 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 17 septembre 2008
22 juin 2004 à 14:42
OK, alons si pour les class.

mais un petit exemple peut-être ?

Merci
Olivier
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Hobby Messages postés 116 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 17 septembre 2008
22 juin 2004 à 16:57
J'ai trouvé une source sur le site avec une exemple.

Je creer un class que je nome 'composant'
Dans cette class j'écrit:
Option Explicit
Private strA As String
Private strB As String
Property Get Auteur() As String
   Auteur = strA
End Property
Property Get Societe() As String
    Societe = strB
End Property
Property Let Auteur(ByVal vData As String)
    strA = vData
End Property
Property Let Societe(ByVal vData As String)
    strB = vData
End Property


Ou est l'intéret puisque je vais devoir creer autant de variable privé que de propriété????

Olivier
0
PiterTheWood Messages postés 48 Date d'inscription samedi 19 avril 2003 Statut Membre Dernière intervention 23 mars 2007 1
22 juin 2004 à 19:21
C'est l'utilisation des collections d'objet. Dans c'est collection tu peux ajouter des classe et même des collections.

'Déclaration de ta collection
Dim colMaCollection as Collection

'Déclaration de ta classe
dim clsMaClasse as Class1

'Création de ta collection
Set colMaCollection = New Collection

'Création de ta classe
set clsMaClasse = New Class1

'Ajout des valeurs dans ta Classe
clsMaClasse.MaPropriété = MaValeur
....

'Ajout de la Classe dans la collection
colMaCollection.Add = clsMaClasse

'Pour rechercher une classe en particulier
For each clsMaClasse in colMaCollection
   if clsMaClasse.MaPropriété = MaValeur then
       ....
   end if
next



Voila un bel avantage qu'on peut faire avec des objets et des collection pour être capable de les gérés

Si tu veux avoir plus d'info dit le moi j'éssayerais de t'aider

Piter TheWood
0
cs_Hobby Messages postés 116 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 17 septembre 2008
22 juin 2004 à 19:30
Merci, mais je doit faire que mon 'objet' soit (unique dans mon cas) public donc accesible dans toutes sub et fonction des forms et module.
'Déclaration de ta collection
Public colMaCollection as Collection
Public clsMaClasse as Class1

'Création de ta collection
Set colMaCollection = New Collection
cette partie je ne peux pas la faire dans la déclération...


Ou alors, j'ai rien compris....

Merci
Olivier
0
PiterTheWood Messages postés 48 Date d'inscription samedi 19 avril 2003 Statut Membre Dernière intervention 23 mars 2007 1
22 juin 2004 à 22:10
Lors de la création d'une classe

Private sub Class_Initialize()
Set clsMaClasse = New Class1
Set ColMaCollection = New Collection
End sub

Il va faloir que tu l'initalise ton objet lors du démarage de ton programme

ex ds un module:

Global MonObjet as clsMonObjet

Sub Main()
dim x as frmMaFenetrePrincipale

Set MonObjet = new clsMonObjet

Set x = New frmMaFenetrePrincipale

x.show

end sub

Piter TheWood
0
cs_Hobby Messages postés 116 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 17 septembre 2008
22 juin 2004 à 23:06
OK merci Piter.

Dans mon cas les collections ne me serve a rien.
Mais pour les autres début voici un exemple:

Vous faite un forme avec deux textbox et deux bouton, vous copiez le code suivant:
Private Sub Command1_Click()
    Form1.Text1.Text = objComposant.Auteur
End Sub
Private Sub Command2_Click()
    objComposant.Auteur = Form1.Text2.Text
End Sub
Private Sub Form_Load()
    Main
    
End Sub
Private Sub Form_Unload(Cancel As Integer)
    Set objComposant = Nothing
    Unload Me
    End
End Sub

Dans un module vous tapez le code suivant:
Option Explicit
Global objComposant As composant
Public Sub Main()
    Set objComposant = New composant
    objComposant.Auteur = "Olivier"
End Sub

Dans un modules de classe vous metez le code suivant:
Option Explicit
Private strA As String
Private strB As String
Property Get Auteur() As String
   Auteur = strA
End Property
Property Get Societe() As String
    Societe = strB
End Property
Property Let Auteur(ByVal vData As String)
    strA = vData
End Property
Property Let Societe(ByVal vData As String)
    strB = vData
End Property

Maintenant n'importe ou dans votre logiciel vous pouvez lire écrire dans les propriétés Auteur et Societe:
objComposant.Auteur = "xxx"
Debug.Print = objComposant.Auteur

Rasure moi Piter, j'ai bien compris ?
Merci
Olivier
0
cs_Hobby Messages postés 116 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 17 septembre 2008
23 juin 2004 à 01:09
Encore une petite question:

Comment on décalre les sous propriété, j'ajoute origine
Donc:
Property Get Origine()
End Property


J'ai pas besoin de stocker des donnée dans cette propriété mais maintenant je voudrait faire: origine.X (en long)
et ensuite origine.Y (en long)
Comment faire pour que X et Y soit enfant de Origine ?
Merci
Olivier
0
PiterTheWood Messages postés 48 Date d'inscription samedi 19 avril 2003 Statut Membre Dernière intervention 23 mars 2007 1
23 juin 2004 à 05:21
Crée une classe clsOrigine avec la propriété X et Y

Classe Origine
Public Property Get X()
   'ton code
End Property
Public Property Let X()
   'ton code
End Property
Public Property Get Y()
   'ton code
End Property
Public Property Let Y()
   'ton code
End Property


Dans ta classe composant

Option Explicit
Public Origine as clsOrigine
Private strA As String
Private strB As String

Public Property Get Auteur() As String
Auteur = strA
End Property

Public Property Get Societe() As String
Societe = strB
End Property

Public Property Let Auteur(ByVal vData As String)
strA = vData
End Property

Public Property Let Societe(ByVal vData As String)
strB = vData
End Property

Private sub Class_Initialize()
Set Origine  = New clsOrigine
End sub


Avec cela tu devrais obtenir des sous propriété

Piter TheWood
0
cs_Hobby Messages postés 116 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 17 septembre 2008
23 juin 2004 à 08:39
Merci Piter, cela fonctionne.

Dans ce cas, Microsoft n'a pas cherché la simplicité, si on doit faire plus 3-4 niveaux pour plusieurs propriétés cela devient fastidieux et long.

Merci
Olivier
0
Scalpweb Messages postés 1467 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 5 mai 2010 4
23 juin 2004 à 17:41
Ben oui mais je vois pas trop comment il aurait été possible de faire autrement...

Pice-WCorp bientôt sur le net.
0
cs_Warning Messages postés 516 Date d'inscription samedi 3 février 2001 Statut Membre Dernière intervention 24 octobre 2006 2
23 juin 2004 à 18:46
faut etre organisé c'est tout ... franchement on s'y fait est le code est beaucoup plus clair au final.
J'ai un projet avec + de 50 modules de classes (pour mon logiciel vbreformer) et c'est beaucoup plus simple de s'y retrouver au final.

Mail:ASC.Warning@caramail.com
Website: http://www.hexorciser.fr.st/

Warning
0
cs_Hobby Messages postés 116 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 17 septembre 2008
23 juin 2004 à 23:49
Vous avez raison, vaut mieux passer 10min a le faire correctement.
Merci à tous
Olivier
0
Rejoignez-nous