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

Windows Presentation Foundation Discussion :

Ouvrir une fenetre non modale avec Show()


Sujet :

Windows Presentation Foundation

  1. #1
    Membre à l'essai
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Points : 24
    Points
    24
    Par défaut Ouvrir une fenetre non modale avec Show()
    Bonjour,

    Lors du développement d'un projet, je suis confronter à un problème bien étrange.
    Ayant eu l'habitude de développer avec les WinForms je n'ai jamais rencontré ce type de problème, je vous explique :

    Souhaitant afficher un menu puis une fenêtre, je désire donc ouvrir le menu et cette fenêtre en type "non modale", c'est à dire différent du ShowDialog(), pour que l'utilisateur puisse interagir entre ces deux dernières.

    Dans ma class controleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    public class controleur : IAffichage
      {
         Aff_par_capteur Affichage_par_capteur;
         menu w_menu;
         public void run() // Point d'entrée de la classe
            {
                // Ouverture d'une fenêtre retournant le choix d'ouverture d'une fenetre
                Choix_vue vue = new Choix_vue(); 
                vue.ShowDialog();
                if (vue.Info != null) // Si un choix a été fait
                {
                    if ("par_capteur" == vue.Info.ToString()) // Si on veut ouvrir la fentre "par_capteur"
                    {
                        w_menu.Show(); // On ouvre le menu
                        Affichage_par_capteur.Show(); // On ouvre la fenetre
                    }
                    else if (....)
                    {
                     // ...
                     }
                  }
              }
    }
    Mais ces fenêtres s'ouvrent puis se referment immédiatement !
    Le contenu des fenêtres en question se résume à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        public partial class menu : Window
        {
            public menu()
            {
                InitializeComponent();
            }
    }
    Avez_vous une explication à me fournir sur la méthode à utiliser pour ouvrir des fenêtre non modale en WPF ? A savoir que j'ai également testé Visibility.visible, mais le résultat me semble le même

    Merci par avance.

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    Citation Envoyé par morel16
    Mais ces fenêtres s'ouvrent puis se referment immédiatement !
    C'est surprenant, car c'est bien ainsi qu'il faut procéder. La méthode Show est celle qui faut.

    Tu as bien au moins la dernière version du framework (3.5 SP1) ?
    Essaie de lancer ton application en mode Debug pour voir si le debugger intercepte une exception.

  3. #3
    Membre à l'essai
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Points : 24
    Points
    24
    Par défaut
    Finalement après avoir reçut de l'aide problème résolu.

    Explications :

    J'avais supprimé le fichier de base App.xaml qui définissait le startupURI pour moi même choisir le fichier de compilation dans les paramètres de mon projet.
    Lors de la compilation avec des fenêtres modale tous se passe correctement, le problème survient avec des fenêtres non modale et donc par l'utilisation de la méthode Show() au lieu de ShowDialog(). Pour ma part je ne connais pas exactement le principe de fonctionnement du WPF, mais une gestion d'évènement des fenêtres doit être crée automatiquement, et j'ai donc du la supprimer en remodelant la génération de mon application.
    Il faut donc :

    1 - Recréer le fichier app.xaml et lui redéfinir son StartupURI . Donc recréer une fenêtre dédié.
    2 - Remise à 0 du fichier de configuration de l'application
    3 - Dans les propriété du fichier App.xaml, définir l'action de génération comme : ApplicationDefinition
    4 - Hériter l'app.xaml.cs de Application.
    5 - Déboguer et compiler.

    En espérant que çà servira pour d'autres personnes.

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    C'est une bonne explication aussi

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

Discussions similaires

  1. Réponses: 22
    Dernier message: 22/06/2011, 07h13
  2. Attente de fermeture d'une fenetre non modale
    Par argonath dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/08/2009, 15h41
  3. Ouvrir une fenetre avec l'heure sur écran externe avec X11
    Par jamesleouf dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 20/03/2006, 14h56
  4. [Eclipse 3.1] ouvrir une fenetre avec un bouton
    Par Nanoulov dans le forum SWT/JFace
    Réponses: 4
    Dernier message: 01/08/2005, 13h33

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