Ajouter propriétés à un contrôle windows

Résolu
monsieurlemouche Messages postés 102 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 28 juin 2007 - 5 nov. 2005 à 11:13
monsieurlemouche Messages postés 102 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 28 juin 2007 - 7 nov. 2005 à 01:59
salut,

quelqu'un pourrait-il me dire, dans les grandes lignes, la démarche à suivre pour ajouter de nouvelles propriétés à un contrôle (un treeview par exemple)existant?

monsieurlemouche

13 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 nov. 2005 à 04:13
re,
euh.. beh non, pas trop

voici le fonctionnement [VB6]
Form 1 contient un Timer1 (à la place de ton TreeView) et un Command1


' -------------------------------
' Module de classe (nommé Class1)
' -------------------------------
'
Option Explicit
'
Private mChaine As String
Private mTimerObj As Object
'
'
' *- OBJET -*
Property Get Object() As Object
Set Object = mTimerObj
End Property
Property Set Object(new_mTimerObj As Object)
Set mTimerObj = new_mTimerObj
End Property
'
'
' *- PROPRIéTé SUPPLéMENTAIRE -*
Property Get Chaine() As String
Chaine = mChaine
End Property
Property Let Chaine(new_mChaine As String)
If new_mChaine <> mChaine Then mChaine = new_mChaine
End Property

' -------------------
' Form (nommée Form1)
' -------------------
'
Option Explicit
'
Private Test As New Class1
'
'
Private Sub Form_Load()
' init classe
Set Test = New Class1

' init object dans la classe
Set Test.Object = Timer1

' init propriété supplémentaire
Test.Chaine = "Ceci est une propriété additionnelle (des plus inutiles celà dit...)"

' init du vrai objet
Timer1.Tag = "Ceci est le Tag du vrai objet. accessible aussi de la classe???"
End Sub
'
'
Private Sub Command1_Click()
' affichage propriété supplémentaire
Debug.Print Test.Chaine

' affichage Tag par objet d'origine
Debug.Print "Tag par Objet : " & Timer1.Tag

' affichage propriété supplémentaire
Debug.Print "Tag par Classe : " & Test.Object.Tag
End Sub


<SMALL> Coloration syntaxique automatique [AFCK]</SMALL>


çà me semble être la démarche propre la plus logique
@+ ;)
PCPT [AFCK]
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
5 nov. 2005 à 12:06
salut,
bah dans les grandes lignes (logique VB6), tu as un module (de classe) contenant les propriétés à ajouter, et tu "attaches" le module au contrôle. tu accèdes ensuite au contrôle par le module, qui lui te renvoie tant "ses" modifs (donc propriétés) que les propriétés du contrôle de base...

voilà dans l'idée...
@+
PCPT [AFCK]
0
monsieurlemouche Messages postés 102 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 28 juin 2007
6 nov. 2005 à 01:04
salut,
c'est en gros ce que je pensais faire mais voila, j'y arrives pas...

objectif: ajouter une propriete qui renvoie le nombre de niveaux hiérarchiques déployés au sein d'un controle treeview.

je définis un module de classe "classTree"
deux propriétés : tree as objet
iLevelsOpen

dans le form principal

initialyze()
set monObjetTree=new classTree
monObjetTree.tree=Treeview1 'controle du form
...

ce qui me chagrine, c'est que depuis le form on ecrira ça:
monObjetTree.tree.propriété pour accéder à la propriété du treeview
et monObjet.iLevelsOpen pour accéder à la propriété iLevelsOpen qui est une propriété du Treeview. il y a donc deux manières de pointer la référence pour une propriété du Treeview.

est-ce bien cela ?


mais il me vient une idée:
* depuis le form, je fait référence à une propriété du Treeview des deux manières suivantes;
Treeview1.propriété 'pour les propriétés déjà existantes
ou monObjetTree.iLevelsOpen 'pour la propriété ajoutée

* depuis l'intérieur de la classe, j'ai l'objet mvartree pour pointer et une variable integer privée mvariLevelsOpen à manipuler en guise de nouvelle propriété du contrôle Treeview1.

est-ce bien cela ?

monsieurlémouche
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 nov. 2005 à 04:15
' affichage Tag par Classe*
(dernier commentaire^^)
0

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

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 nov. 2005 à 04:18
oh, et aussi dans la classe
Private Sub Class_Terminate()
Set mTimerObj = Nothing
End Sub
0
monsieurlemouche Messages postés 102 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 28 juin 2007
6 nov. 2005 à 12:03
salut, un grand merci pour ton aide

remarquons toutefois que ta méthode est exactement celle que j'ai proposée contrairement à ce que tu as voulu me laisser croire.

regardons cela:


je définis un module de classe "classTree" ou Class1
deux propriétés : tree as objet ou Test
iLevelsOpen ou Chaine

dans le form principal

initialyze()
set monObjetTree=new classTree set Test= new Class1
set monObjetTree.tree=Treeview1 'controle du form set Test.Objet=Timer1
... Test.chaine="blabla"

ce qui me chagrine, c'est que depuis le form on ecrira ça:

Private Sub Command1_Click()
' affichage propriété supplémentaire
' on pointe 1 fois pour obtenir une propriété du controle
Debug.Print Test.chaine


' affichage Tag par objet d'origine
' on pointe 1 fois pour obtenir une propriété du controle
Debug.Print "Tag par Objet : " & Timer1.Tag

' affichage propriété supplémentaire
' on pointe 2 fois pour obtenir une propriété du controle
Debug.Print "Tag par Classe : " & Test.Object.Tag
End Sub

Dès fois, on point une seule fois, et des fois on pointe deux fois, c'est bien ce que j'ai dis dans la premier post.

la hiérarchie est celle-ci:

Class1
objet
propriété originale1
propriété originale2
propriété originale3
etc
propriete nouvelle

la propriété nouvelle est sur le meme niveau hiérarchique que l'objet au lieu d'être au même niveau que les propriétés originales.
est-ce un problème crucial?

voila ce qui me "chagrinait" et pourquoi je pensais mal m'y prendre.

merci pour ton aide

monsieurlémouche
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 nov. 2005 à 12:38
salut,
désolé, je n'ai rien "voulu laisser te croire", j'ai mal compris ton problème en pensant que ton "initialyse" était le Class_Initialize... (mal lu)

mais pour ce qui te chagrine, non.
Timer1.Tag = Test.Object.Tag

j'ai mis les 2 pour montrer que c'était le même objet. c'est d'ailleurs pour çà qu'au Form Load (dans l'exemple), j'avais mis le Tag du vrai Timer.

en fait, exemple un combo, tu pourrais ainsi toujours appeler ..... Test.Object.AddItem "blabla"
c'est la Class qui se charge ensuite de l'attribuer à ton Objet réel. et tu as, avec la même syntaxe, ta propriété (tes...) Test.PropSupp....

tu n'as plus besoin de passer par l'objet (contrôle) même si c'est faisable...

désolé d'avoir lu trop rapidement, et que tu aies cru que j'aime perdre mon temps.....

@+ bonne continuation
PCPT [AFCK]
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 nov. 2005 à 12:44
ps : si tu veux directement un Test.Machin et un Test.AddItem (au lieu de .Machin et .Object.AddItem), tu devras faire une classe WithEvents, et récupérer la totalité des propriétés, fonctions, procédures, et les retransmettre.
exemple :
property Get Interval() as Interger
Interval = Me.Object.Interval
...

Property Let Interval(new as integer)
Me.Object.Interval = new

tu auras donc tout sur le même niveau, mais juste pour ajouter une ou 2 propriétés, çà me semble du travail inutile

cordialement.
0
monsieurlemouche Messages postés 102 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 28 juin 2007
6 nov. 2005 à 14:58
salut,

pas besoin d'être désolé, bien au contraire, tu m'as été d'une grande aide car programmant tout seul dans mon coin et étant débutant, j'ai besoin de voir mes représentations confirmées ou démenties.

juste une autre chose:

pourquoi cela ne passe pas:

je defini une propriété collection "collection" dans un module de classe "Class1 ".

dans le form je fait:
set class1.collection=Treeview1.Nodes 'treeview est un controle du form

en fait, je souhaite affecter la collection Nodes du controle situé dans le form
à la propriété collection de la classe
j'obtiens un "type mispatch"

quelle en est la raison?

merci
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 nov. 2005 à 15:26
re,
un module de classe .... c'est un objet en fait.
tu ne peux pas mettre ".text = "machin" pour un textbox qui n'existe pas par exemple.
c'est pareil. le module de classe n'existe pas en tant que module. tu ne peux pas appeler ni de propriété, ni de fonction, étant dans un module de classe. il est le seul à pouvoir s'utiliser directement.
donc pour ton cas, il faut d'abord le déclarer comme tu avais fais (et moi pareil^^), puis attribuer l'objet TreeView de ta Form vers le module, et enfin seulement, soit par la Form ou par le Module, initialiser ta collection

++
PCPT [AFCK]
0
monsieurlemouche Messages postés 102 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 28 juin 2007
6 nov. 2005 à 22:58
Option Explicit
Dim monObj As clTree
--------------------------------------------
Private Sub Form_Initialize()

Set monObj = New clTree
Set monObj.nodes = treeview1.nodes
monObj.collection=treeview1.nodes 'ERREUR!
'il y a une erreur de type mismatch lors de la définition de la propriété collection
' erreur même suand j'utilise set monObj.collection=treeview1.nodes

end sub ----------------------------------------------------------




ma classe clTree

Private mvarnodes As Object 'local copy
Private mvarcollection As collection 'local copy

Public Property Set collection(ByVal vData As Collection)
Set mvarcollection = vData
End Property


Public Property Get collection() As Collection
Set gg = mvarcollection
End Property



Public Property Set nodes(ByVal vData As Object)
Set mvarnodes = vData
End Property


Public Property Get nodes() As Object
Set nodes = mvarnodes
End Property



d'où vient l'erreur?
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 nov. 2005 à 23:39
il sort de où gg ?
çà devrait être Set collection = mvarcollection
celà dit, en VB6 en tout cas, collection ne peut pas être un nom de propriété (mot clé)

et je reste dans l'optique où tu devrais en premier lieu lier une variable object (treeview) au contrôle. et c'est la classe, à cet appel, qui se crée elle-même ses nodes...
0
monsieurlemouche Messages postés 102 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 28 juin 2007
7 nov. 2005 à 01:59
salut,

gg est bien sur "collection"

pour ce qui est du controle, je l'ai lié à un objet dans la classe et ça marche bien.

merci de ton aide
je résolverai mon histoire de collections tout seul
0
Rejoignez-nous