public memo as classe1
dim cls2(1 to 10) as new classe1
public propriété
VB:
Dim cls(1 To 10) As New Classe1
Public memoire As Classe1
Public toutlepaquet
Sub test()
Set memoire = New Classe1
'papa dans maman
For i = 1 To 10
Set cls(i).memoire = memoire
Next
'maman dans papa
memoire.toutlepaquet = cls
End Sub
qui a fait l'oeuf ?
l'oeuf ou la poule? je sais plus moi
en tout cas tu a compris l'importance de cette astuce
ca te libère d'un module standard avec de variables public
tout est dans la classe
comme mon calendar tu prend le module et tu le glisse dans un projet
Public ValeurInstance As Variant
Public ValeurCommune As Variant
Public MaClasse1 As MaClasse
Private Sub ProcedureDansMaClasse()
...
'Seule la 1ère instance de la Classe stocke la valeur commune à toutes les instances
MaClasse1.ValeurCommue = "zzz"
...
End Sub
En Module standard ou UserForm
Code:
Sub InstancierMaClasse()
Static TabMaClasse(1 To 10) As New MaClasse
For i = 1 To 10
'Toutes les instances de la Classe connaissent la 1ère Instance
Set TabMaClasse(i).MaClasse1 = TabMaClasse(1)
Next i
End Sub
Bonjour
c'est pas tout a fait la bonne interprétation @Dudu2
en fait tu affilie les 10 a la 1
alors que moi c'est une instance qui n'a rien avoir avec les 10 autres
Le fait qu'elle soit Static ou pas et la visibilité sont, me semble-t-il 2 choses différentes.
Et oui, déclarée dans une procédure, le TabMaClasse() n'est visible que dans cette procédure.
Mais la rendre Static assure sa persistance pour la durée d'existence de son hôte. J'aurais pu la déclarer en variable Module ou UserForm.
c'est pas tout a fait la bonne interprétation @Dudu2
@Dudu2
ben c'est surtout que si tu veux t’emmêler les pinceaux ya pas mieux qu'utiliser une des 10 pour en faire la commune
ceci ci dessous serait plus proche de ma méthode
ET EN PLUS là !! je fais la remontée et la redescente de l'arborescence
autrement dit j'ai n'importe quel élément je peux donc atteindre n'importe quels autres
démonstration
le module classe
Code:
Public lesfilles
Public mère As maclasse
Public nom
le module standard (pour rester dans ta façon de faire)
VB:
Dim filles(1 To 10) As New maclasse
Dim mère As maclasse
'non c'est instancier MES!!! exemplaires de classe
Sub InstancierMaClasse()
Dim X&
Set mère = New maclasse 'on instancie la matriarche pour le moment elle est tout seule et c'est la même que les autres
mère.nom = "Agathe" ' elle s'appelle "Agathe"
For i = 1 To 10
filles(i).nom = "fillette " & i 'on donne un nom aux 10 filles(x)
Set filles(i).mère = mère 'on affilie la mère aux 10 instances filles
Next i
'on affilie la mère aux tableau des 10 filles(x)
mère.lesfilles = filles
'on peut donc maintenant remonter ou descendre dans l'arborescence de l'affiliation
'de la mère a toutes les filles ou de une des filles à la mère
'ok testons pour voir ; on prend une fille au hasard
X = 3
MsgBox "la fiiles(" & X & ") de la mèreprénommée [" & mère.nom & "] s'appelle " & mère.lesfilles(X).nom
MsgBox "la mère de la fille(" & X & ") donc [" & filles(X).nom & "] s'appelle " & filles(3).mère.nom
MsgBox "qui est la fille d'Agathe qui viens après la fillette 3 " & vbCrLf & _
"c'est " & filles(3).mère.lesfilles(4).nom
End Sub
voila tu veux demander une des filles en mariage ,tu va voir sa mère
autrement dit mère est un membre descendant de chaque instances filles
mais les filles sont aussi membre descendant de la mère par l'intermédiaire du tableau lesfilles
comme je disais .... "qui a fait l'oeuf" ça on sait toujours pas hein
Pas grave ! J'ai plus l'âge d'épouser la mère que d'épouser sa fille.
Si tu veux créer une classe mère et des filles, tu es libre de le faire.
Tu peux aussi créer la grand-mère, l'arrière-grand-mère et les petites filles.
Mais pour garder un élément commun à toutes les classes, ce qui était mon but, pas besoin d'avoir toute une généalogie. Et en plus, tu le sais !
c'est pas une généalogie c'est une seule en fait
qui peut remplacer un module standard avec des variable public(ce que l'on trouve le plus souvent)
alors utiliser la première (ou la Nème d'ailleurs) nous amène a la notion (public/private)
qui risque d'être ingérable dans certains cas
j'entends par la que des variables private ou public non seulement elle auront le comportement que tu connais déjà mais aussi le fait que dans certains cas le public ne marchera pas
tu a besoins de 10 instances pour 10 boutons/textbox/ou autres crée 11 instances
tes instances boutons ou autres ne seront pas polluées par des property et ou membres dont elle se cognent
ps :maintenant que j'ai fini avec ma méthode ,je viens de tester et retourner dans tout les sens le modèle de pijaku(proposé par @fanch55)avec la shwapi.dll et en effet c'est bluffant pas trop compliqué à comprendre c'est similaire a du hooking
ps :maintenant que j'ai fini avec ma méthode ,je viens de tester et retourner dans tout les sens le modèle de pijaku(proposé par @fanch55)avec la shwapi.dll et en effet c'est bluffant pas trop compliqué à comprendre c'est similaire a du hooking
Je n'ai pas travaillé sur le code de @fanch55 pour couper un peu avec le codage et aussi parce que je n'y comprends rien. Mais si toi ou @fanch55 avez fait quelque chose sur cette base je suis intéressé par principe.
re @fanch55
et oui c'est normal
les controls Listbox,combobox,listview,multipage sont des fenêtre a part entière
elles ont donc un handle et un windowlong
lors du classement dans le MesTxtBtu classe le multipage avec une page active donc avec un getwindowlong qui te donnera un long correspondant à ses paramètres
même si le howner reste le multipage comme tu change le getwindowlong du multipage en changeant de page , le IID_IDispatch sera incohérent et le ppcpOutt sera pour le coup vraiment OUT
alors pourquoi ça marche un peu (ou des fois)tu me diras ?
tout simplement par ce que les autres controls n'ont pas de handle si tu teste avec getwindowEx tu verra ils ont tous le même
alors attention quand vous allez éventuellement le modifier pour vos besoins !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
le vbattribute va sauter , il vous faudra l'exporter/bloknote/inscription de l'"attribut/enregistrer réimporter d"ans le projet