pracoupeau
Messages postés10Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention 5 septembre 2005
-
1 août 2005 à 19:50
pracoupeau
Messages postés10Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention 5 septembre 2005
-
2 août 2005 à 01:22
Bonjour,
J'ai une Form "Frm1", toujours chargée, qui doit acceder a un Treeview dans lequel il peu y avoir plus de 10 000 node. Cette Form n'a pas d'interface utilisateur et n'est jamais visible.
Une 2éme Form "Frm2" est chargée de temps en temps par l'utilisateur final, dans laquelle un Treeview montre les données qui peuvent être modifiées, supprimer,...
Cette Frm2 contient beaucoup de controls et ne peut pas être laissée en mémoire pour une question d'optimisation.
J'ai donc besoin de "Synchroniser" ces deux éléments qui, pour une raison évidente de place en mémoire, ne doivent pas être DEUX Treeview, mais un seul.
J'ai essayé un truc du genre :
Dans Frm2 j'ai ajouté un controle Treeview, chargé les données et dans Frm1 j'ai ajouté une variable "Private Tx as Frm2.Tw", ca marche sauf que lorsque Frm2 est déchargée, la prochaine intruction dans Frm1 qui utilise la variable Tx, recharge Frm2 en mémoire à cause de la référence à son objet Tw.
Donc j'ai essayé dans l'autre sens :
J'ai déclaré dans Frm1 "Private Tx as Treeview", j'ai chargé les données dans sa structures, mais lorsque je charge Frm2, (j'ai besoin d'un Treeview avec interface utilisateur), impossible d'affecter une référence d'objet au Treeview de Frm2, l'instruction Set Tw = Frm1.Tx génère une erreur.
Si quelqu'un a une idée pour ne pas avoir 2 Treeview à charger, et pour pouvoir affecter une référence d'objet à un control VB ?
pracoupeau
Messages postés10Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention 5 septembre 2005 2 août 2005 à 01:22
Salut,
Heu [auteurdetail.aspx?ID= 84425 nhervagault] , J'ai pas bien compris ta réponse, mais peut être que mon exposé n'était pas très clair. Enfin merci pour ta participation.
Daniel, Merci pour ton aide . En fait ca marche, et pour les
évènements, ils continuent à réagir dans la Form initiale, et on peut
même continuer à s'adresser au control comme si il n'avait pas changé
de Form !
En fait la solution exacte c'est ça :
Dans Form1, il y a le Treeview dessiné sous l'IDE, nom Tw, et tout le
code pour charger les données, traiter les évènements, Clic,
BeforeLabelEdit, ... et RIEN d'autre ( pas d'appel à SetParent.
Sur demande, par un menu contextuel par ex, il y a juste : Form2.Show.
Dans Form2 :
Private Sub Form_Load()
SetParent Form1.Tw.Hwnd, Me.Hwnd
Form1.Tw.Move 200, 200
Form1.Tw.Visible = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call SetParent(Form1.Tw.Hwnd, Form1.Hwnd)
End Sub
Quelque part dans le code de Form2, il suffit de s'adresser au Treeview normalement :