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 :

[C# + WPF] Ouvrir une boite de dialog perso après la fermeture de la MainWindow


Sujet :

Windows Presentation Foundation

  1. #1
    Membre régulier Avatar de Thor Tillas
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Points : 90
    Points
    90
    Par défaut [C# + WPF] Ouvrir une boite de dialog perso après la fermeture de la MainWindow
    Bonjour à tous,

    J'ai créé une librarie qui permet d'afficher une boite de dialog à partir d'une exception qu'on lui donne et de quelques autres infos... Le but est bien sur de pouvoir utiliser cette librairie dans toute l'applic de manière omogène.

    Mon problème actuel est que l'un des composants qui utilise ma librairie lève une exception dans l'event "Closed" de sa fenêtre WPF et il aimerait que l'utilisateur soit tout de même notifié de cette erreur...

    Au début je me suis dit owned c'est super simple...
    Je n'ai qu'à identifier lorsque la fenêtre est en mode Closed et de pas la lier à mon dialogue...

    Voici le contenu de la méthode qui me permet d'afficher mon dialog... "errorInfo" est un objet qui contient toutes les infos de mon dialog, le texte, l'exception, le lien ...


    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
    25
    26
    27
    28
    29
    30
    31
     
    //méthode appellée par le client de la librairie
    public static void ShowError(string contextMessage, System.Exception ex, string contextId)
    {
      System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Send, showErrorDispatched, contextMessage, ex, contextId);
    }
     
    // méthode utilisée pour dispatcher l'appel dans le bon thread...
    private static void ShowErrorDispatched(string contextMessage, System.Exception ex, string contextId)
    {
      ErrorInfo errorInfo = new ErrorInfo(contextMessage, ex, contextId);
      ErrorDialog.Show(errorInfo);
    }
    // méthode qui crée puis affiche la boite
    public show(ErrorInfo errorInfo)
    {
      ErrorDialog errorDialog = new ErrorDialog(errorInfo);
      // windows.Count = errorDialog + toutes les autres fenêtre, donc si c'est 1
      // ou moins, c'est qu'il n'y a que errorDialog, donc pas de MainWindow
      if (Application.Current.Windows.Count > 1)
      {
        // lien avec la windows principale du moment
        errorDialog.Owner = Application.Current.MainWindow;
        errorDialog.ShowDialog();
      }
      else
      {
        // affiche une boite de dialog sans parent... MARCHE PAS
        errorDialog.ShowDialog();
      }
    }
    Mais comme ceci, mon dialogue ne s'affiche pas et la méthode showDialog retourne directement.

    J'ai aussi essayé de créer une "Window" temporaire et de la donner comme owner au showdialog... rien à faire.

    Est ce que quelqu'un aurait une petite idée par hasard ?
    Au travail, il y a deux sortes de personnes. Ceux qui ont un pistolet chargé, et ceux qui creusent. Moi je creuse...

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Dès lors que tu fermes le fenêtre MainWindow, tu fermes l'application en elle-même alors tu ne peux plus rien faire.

    Il faut que tu mettes l'apparition de ta boite de dialogue dans le Closing (et pas Closed).
    Tu peux également regarder les paramètre de App.xaml: il y en a un (WindowShutdown je crois ou quelque chose comme ca) qui sert à indiquer quand l'application doit se fermer (a la fermeture de la derniere fenêtre, lorsque l'utilisateur le dit, etc...)

  3. #3
    Membre régulier Avatar de Thor Tillas
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Points : 90
    Points
    90
    Par défaut
    Mais pourquoi alors je peux faire un MessageBox.show("salut") sans problème... je dois bien pouvoir copier ce comportement non ?
    Au travail, il y a deux sortes de personnes. Ceux qui ont un pistolet chargé, et ceux qui creusent. Moi je creuse...

Discussions similaires

  1. [FCKEDITOR 2.x.x] Ouvrir une boite de dialog
    Par omar24 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 07/09/2011, 11h34
  2. Ouvrir une boite de message
    Par Dimitri_87 dans le forum C
    Réponses: 8
    Dernier message: 12/07/2006, 13h49
  3. [IMAP] ouvrir une boite d'emails en php
    Par jadoo dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 03/04/2006, 22h11
  4. Ouvrir une seconde fiche "dialog"
    Par firejocker dans le forum MFC
    Réponses: 8
    Dernier message: 16/11/2005, 22h33
  5. [mfc] affichage dans une boite de dialog
    Par chronos dans le forum MFC
    Réponses: 3
    Dernier message: 14/06/2004, 15h12

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