Boutons suivants/precedent pour un formulaire

Résolu
gzitoun Messages postés 61 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 10 décembre 2009 - 18 juil. 2007 à 09:11
gzitoun Messages postés 61 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 10 décembre 2009 - 19 juil. 2007 à 15:05
Salut,

voila je suis en train de faire une sorte de QCM avec plusieurs ecrans:
je voudrais avoir des bouton suivant/precedent.

Pour le suivant, pas de probleme:
        private void suivant_Click(object sender, EventArgs e)
        {
            Ecran4 fe4 = new Ecran4();
            fe4.ShowDialog();
        }

Mais pour le precedent en faisant de meme, je perds forcement les donnees entrees precedemment:
        private void precedent_Click(object sender, EventArgs e)
        {
            Ecran2 fe2 = new Ecran2();
            fe2.ShowDialog();
        }

Y-a-t-il un truc facile pour revenir a l ecran precedent tout en conservant les donnees entrees?

PS: peut etre plus complique: je suis a l ecran3. Je reviens 2 ecrans en arriere(ecran1)  pour modifier quelque chose.  Je modifie. Je veux me retrouver ou  j etais (ecran3) en effectuant suivant 2 fois. 
Comment faire pour ne pas reremplir l ecran2?

Merci!

5 réponses

ctx_man Messages postés 285 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 20 janvier 2013 3
18 juil. 2007 à 11:07
Salut, Voila un tit bout de code pour appuyer Bidou (c'est pas optimisé mais c'est assez simple)

Tu créer une form qui va servir de template à tes écrans, elle ne contient que les boutons précédents et suivant (et tout ce que tu trouvera sur chacun de tes écrans). Voici le code de cette fenetre template

public partial class frmEcran : Form
{
private frmEcran m_Prev;
private frmEcran m_Next;

public frmEcran(frmEcran Precedent)
{
InitializeComponent();
m_Next = null;
m_Prev = Precedent;
}

public abstract void suivant_Click(object sender, EventArgs e);
public abstract void precedent_Click(object sender, EventArgs e);
}

Ensuite, pour chaque formulaire qui te sert d'ecran, tu change l'héritage :
public partial class frmEcran1 : frmEcran

Comme ca, chaque écran possède tes deux variables privées, le constructeur qui prend un autre écran en paramètre et tes bouttons suivant/précédents.

Comme les méthodes de click de ces bouttons sont en abstract, tu devra les écrire pour chaque écran.

C'est pas dur, c'est tout le temps la meme chose a peu de chose pres :

public void suivant_Click(object sender, EventArgs e)
{
Visible = false; //Masque la fenêtre en cours
if(m_Next == null) //L'écran suivant n'a pas encore ete crée
m_Next = new frmEcran(this); //A remplacer par Ecran1(this), Ecran2(this), .... selon l'écran qui doit être crée
else
m_Next.Visible = true;
}

public void precedent_Click(object sender, EventArgs e)
{
Visible = false; //Masque la fenêtre en cours
if(m_Prev == null) //L'écran précédent n'a pas encore ete crée, ne devrait jamais etre vrai, mais au cas ou ...
m_Prev = new frmEcran(this); //A remplacer par Ecran1(this), Ecran2(this), .... selon l'écran qui doit être crée
else
m_Prev.Visible = true;
}

Sur ton dernier formulaire, il faudrait que ton boutton suivant change de nom.
Utilise la propriétée suivant.Text pour ca. A mettre dans le constructeur de ce dernier formulaire.

Ce dernier formulaire à un comportement spécial sur sont boutton suivant. Puisqu'il valide les données. Utilise m_Prev pour retrouver tes écrans précédents et leurs données.
Quand les données d'un formulaire sont validée, fait un Close() dessus et efface ses références aupres des autres formulaires pour le décharger complètement.

exemple, tu as enregistrer complètement les valeurs de l'ecran2, tu peux détruire cet écran. Tu te place dessus puis :

m_Prev.m_Next = m_Next;
m_Next.m_Prev = m_Prev;
close();
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
18 juil. 2007 à 09:17
Salut,
Ce que tu dois faire, c'est pas reconstruire ton formulaire à chaque fois avec un new, mais garder une référence au fur et à mesure que l'utilisateur clique sur suivant pour pouvoir par la suite revenir en arrière...

<hr />
-Blog-
2
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
18 juil. 2007 à 10:44
Pour poursuivre sur ce que dit Bidou, tu peux par exemple "cacher" tes formulaires précédent au lieu de les fermer, ainsi tu peux les ré-afficher (avec leure données) si nécessaire.

Par contre, pour avoir déjà eu à faire à cette problématique, attention à la navigation précédent/suivant : Dans certains cas, les données affichée sur le formulaire n+1 dépendent des choix fait dans le formulaire n (ou même encore avant). Si c'est ton cas, alors il va falloir gérer cela (l'utilisateur saisie des données dans le formulaire n+1, fait précédent, modifie sa saisie dans le formulaire n, puis reviens sur le n+1...). Et ça devient vite un sac de noeuds...

Working as designed
0
gzitoun Messages postés 61 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 10 décembre 2009
19 juil. 2007 à 12:18
Merci a vous chers genies de l'informatique!

en esperant un jour faire partie du club...
0

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

Posez votre question
gzitoun Messages postés 61 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 10 décembre 2009
19 juil. 2007 à 15:05
Salut,
j ai un souci avec:
    public abstract void suivant_Click(object sender, EventArgs e);
    public abstract void precedent_Click(object sender, EventArgs e);

Voici l erreur:
Erreur    2    'ABIOS.frmEcran.suivant_Click(object, System.EventArgs)' est abstrait, mais est contenu dans la classe non abstraite 'ABIOS.frmEcran' 

Avez vous une idee?

Encore merci
0
Rejoignez-nous