F_Accueil = this; //maintenant que j'y pense, c'est inutile
}
Un bouton me permet d'aller à form_liste. J'en crée donc une nouvelle
instance que j'appelle f_liste, et je lui passe un pointeur vers la
form accueil, pour pouvoir y retourner.
private void bt_liste_Click(object sender, System.EventArgs e)
{
F_Liste = new Form_Liste(F_Accueil,ma_connexion_in,ma_connexion_out);
F_Accueil.Hide();
F_Liste.Show();
}
Je cache donc ma forme accueil, et lance la forme liste. Dans celle ci,
je choisis parmi une liste de fichiers, et je peux lancer un
téléchargement. J'appelle alors ma troisième forme, où j'indique
l'avancement du transfert : c'est la forme téléchargement que j'appelle f_dl , à laquelle je renseigne des pointeurs vers f_liste et f_accueil.
Dans la classe form_liste :
private
Form_Telechargement
f_dl = new Form_Telechargement();
Lancement de la nouvelle fenetre (en fait, démarrage du téléchargement)
f_dl.Show();
this.Hide();
f_dl.Activate();
Le problème que j'ai, c'est que tout cela ne marche qu'une fois.
Lorsque la première série de téléchargement est terminée, je ferme la f_dl.
Il se passe alors cela :
this.Show(); //this étant la forme liste
this.Activate();
f_dl.Close();
f_dl.Dispose();
f_dl = null;
Je retombe alors sur la forme liste. Si je décide de fermer la
forme_liste et de revenir à l'accueil, pour ensuite retourner sur la
forme liste, et démarrer un nouveau téléchargement, il pante et me dit
que f_dl n'est pas définie à une
instance d'objet. Il me dit cela alors qu'il a lancé une nouvelle forme
téléchargement (elle apparaît, et elle s'appelle normalement l'instance
f_dl). Donc, les mises à jour des progressbar et des label ne sont plus possibles avec le pointeur f_dl
Voilà mon problème, j'espère que j'ai été assez clair.
Je voudrais donc obtenir des conseils pour savoir s'il vaut mieux
cacher les formes, les tuer, et surtout comment faire pour qu'à chaque
fois que l'on lance une nouvelle fenetre (même au bout de x fois), le
pointeur que l'on a prévu pour cette forme (ici f_dl) pointe bien vers elle.
Merci d'avoir pris le temps de lire ce post.
A voir également:
Problème entre passage de Winform (instance supprimée et non référencée à un obj
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 8 sept. 2005 à 14:32
ok... je pense que j'ai compris ce que tu veux faire.
Donc je vais prendre le problème à l'envers.
Tu as un formulaire form_telechargement qui te permet de voir l'état
d'avancement d'un téléchargement, un formulaire form_liste qui liste un
ensemble de fichiers à télécharger et form_acceuil qui ouvre form_liste.
Je ferais comme ceci :
Je laisserai form_telechargement se débrouiller tout seul avec le
téléchargement, ainsi form_liste ne le mettrai plus à jour. L'idée est
de retirer la référence de form_telechargement vers form_liste.
A la fin du téléchargement ou en cas d'erreur, tu pourras déclencher un évènement (Done) que tu intercepteras avec frm_liste.
Dans form_liste, lorsque je choisi un fichier, j'ouvre une nouvelle
form_telechargement à laquelle je passe les informations nécessaire au
téléchargement de mon fichier, je m'abonne aux évènements importants
(Closed, Done...).
Dans form_accueil, je m'abonne à l'évènement Closed de form_liste, et lorsque form_liste se ferme je fais réapparaitre celui ci.
Tu remarqueras que maintenant mes références vont dans ce sens :
el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 20159 8 sept. 2005 à 12:19
Je viens de penser à un truc. Est-ce que j'aurais pas intérêt à
utiliser des fenetres parentes. J'imagines que cela doit avoir certains
avantages de dériver de la fenetre précédente, peut être que l'on peut
passer de l'une à l'autre plus facilement.
Mais si je dérive la 2nde de la 1ere, la 2eme pourra être totalement différente ?
En deux mots, quel est/sont l'intérêt des fenetes parents ? Est-ce que tu penses cela intéressant dans mon cas ?
el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 20159 8 sept. 2005 à 13:47
Oui, c vrai, le lien de f_dl vers l'accueil est inutile, mais je l'avais prévu au début.
En ce qui concerne le lien de f_liste vers f_dl, c'est-à-dire f_dl,
toutes les mises à jour des progressbar et des labels se font dans la
classe form_liste.
f_dl.progressbar1.vlaue = ....
j'ai mis les controles qui sont susceptibles d'être modifiés en public.
Le lien de form_liste vers form_accueil me permet d'activer l'accueil que j'avais caché.
Comment faire alors pour eviter ce que tu appelles références croisées ?