Boutons suivants/precedent pour un formulaire [Résolu]

gzitoun 61 Messages postés lundi 18 juin 2007Date d'inscription 10 décembre 2009 Dernière intervention - 18 juil. 2007 à 09:11 - Dernière réponse : gzitoun 61 Messages postés lundi 18 juin 2007Date d'inscription 10 décembre 2009 Dernière intervention
- 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!
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
ctx_man 285 Messages postés mardi 28 décembre 2004Date d'inscription 20 janvier 2013 Dernière intervention - 18 juil. 2007 à 11:07
3
Merci
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();

Merci ctx_man 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de ctx_man
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 18 juil. 2007 à 09:17
2
Merci
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-
Commenter la réponse de cs_Bidou
Nikoui 794 Messages postés vendredi 24 septembre 2004Date d'inscription 19 août 2008 Dernière intervention - 18 juil. 2007 à 10:44
0
Merci
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
Commenter la réponse de Nikoui
gzitoun 61 Messages postés lundi 18 juin 2007Date d'inscription 10 décembre 2009 Dernière intervention - 19 juil. 2007 à 12:18
0
Merci
Merci a vous chers genies de l'informatique!

en esperant un jour faire partie du club...
Commenter la réponse de gzitoun
gzitoun 61 Messages postés lundi 18 juin 2007Date d'inscription 10 décembre 2009 Dernière intervention - 19 juil. 2007 à 15:05
0
Merci
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
Commenter la réponse de gzitoun

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.