IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Comment obtenir une succession de fenêtres?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Par défaut Comment obtenir une succession de fenêtres?
    Bonjour à tous,

    en guise de complément à l'installation de mon appli, je demande à l'utilisateur de fournir quelques informations. Les fenêtres ressemblent donc à celle que l'on a lors d'une installation.

    Un texte, des champs à remplir, trois boutons previous, next et cancel.
    Voici les problèmes que je rencontre au moment de lancer cette partie de l'appli (c'est pas systématique de lancer ça)

    Au moment d'afficher la première fenêtre soit intro.cs, je ne peux pas utiliser la méthode show. Si je le fais, le thread qui lance le show sur l'objet intro continue de se dérouler en background sans attendre que la fenêtre soit fermée. Même en encapsulant le lancement de show dans un autre thread et en le "join"ant après, le résultat est le même.

    J'utilise donc ShowDialog. celà provoque l'arret du thread qui lance tant que la fenêtre n'est pas fermée.

    Quand l'utilisateur clique sur next, je dois fermer la fenêtre courante et ouvrir la suivante. Biensur je ne peux pas utiliser show pour la fenêtre suivante, sinon le même problème. Un autre problème survient quand l'utilisateur utilise la fonction previous.

    On ne peut utiliser deux fois de suite ShowDialog sur un objet, il doit être fermé entre les deux (d'après l'exception que j'ai obtenue).
    J'ai donc agrémenté mon code de façon à ce que lorsque l'utilisateur clique next ou previous, la fenêtre courante est d'abord cachée ( hide) puis fermée (close) et enfin j'ouvre la suivante.
    Seulement voilà rien n'y fait, j'ai toujours la même exception! (comme quoi l'objet qui représente la fenêtre doit être fermé avant d'appeler à nouveau ShowDialog() dessus).

    J'espère ne pas avoir été trop confus. Je cherche à résoudre celà ou bien un moyen pour avoir la possibilité de naviguer entre les fenêtres de la sorte.

    Merci

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Bah sans ton code, et sans la description de l'exéception que tuas, on ne va aps pouvoir t'aider.

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Par défaut
    euh désolé...
    mais...le code n'est qu'une paraphrase... m'enfin:
    à l'event clic sur le bouton next, je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    current.Hide();current.Close();next_one.ShowDialog();
    sur le bouton previous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    current.Hide();current.Close();previous_one.ShowDialog();
    et l'exception est:

    "Form that is already displayed modally cannot be displayed as a modal dialog box. Close the from before calling showDialog."

    et survient quand on clique next puis previous

    voilà...

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Utilises tu la même forme pour toutes tes fenêtres.

  5. #5
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Moi j'avais a peu pres le meme probleme afin de mettre dynamiquement des formulaires sur une form.

    J'ai utilise les User Control. Je ne connaissait pas, c'est simple a utiliser.

    En fait tu les cree comme des Form (mais qui sont en fait des formulaires) avec le designer en placant tes bouttons et controles dessus, et dans ta Form d'install tu peux appeler le user control que tu veux (tu peux definir tous les evenements que tu veux dans tes user control, les faire communiquer etc... tout comme une vrai Form).

    Lorsque tu cliques sur next, tu n'as qu'a appeler le "next" user control dans ta Form ce qui va remplacer l'ancien (que tu peux juste cacher au cas ou l'utilisateur veuille faire previous et garder tous les champs deja saisis).

    Depuis que j'ai decouvert ca, je l'utilise tout le temps pour afficher dynamiquement des formulaires dans mes pages.

    Voila mon idee, ne faire qu'une Form en appelant des User Control a l'interieur :

    MonUserControl.Parent = MaForm;

    Regarde cet article sur les User Control : http://morpheus.developpez.com/usercontrols/

  6. #6
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Personnellement pour les successions de fenêtre j'utilise moi aussi des UserControl sauf que je stoque la liste des pages dans un List<ClasseDeBaseDesPages> et j'utilise une variable int pour savoir à tout moment où j'en suis. Après, lors de l'appui de next :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    currentPageIndex++;
    MainPanel.Controls.Clear();
    MainPanel.Controls.Add(pages[currentPageIndex]);
    pages[currentPageIndex].Dock = DockStyle.Fill;
    pour le précédent on fait currentPageIndex--, etc,etc ...
    C'est pratique car on peut "voir" la suis logique des pages

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment obtenir une fenêtre Stay-On-Top ?
    Par k_boy dans le forum Langage
    Réponses: 3
    Dernier message: 27/12/2007, 15h32
  2. Comment obtenir une TOpenDialog en fsStayOnTop ?
    Par Tardiff Jean-François dans le forum Composants VCL
    Réponses: 7
    Dernier message: 28/06/2005, 12h53
  3. comment obtenir une ligne aléatoirement
    Par titoumimi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/05/2005, 15h52
  4. Réponses: 17
    Dernier message: 04/04/2005, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo