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

Silverlight Discussion :

MessageBox Personnalisé utilisation show()


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 103
    Par défaut MessageBox Personnalisé utilisation show()
    Bonjour,

    Je me suis créé une messagebox personnalisée pour avoir des boutons supplémentaires.

    J'aimerai faire comme pour le MessageBox et la méthode show, de manière a faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (CWMessageBox.Show("Info", "Enregistrement Annuaire Gestim réalisé",
                                CWMessageBoxButton.Ok, CWMessageBoxIcon.Information) == MessageBoxResult.OK)
                            {...}
    Mais la fenêtre n'attend pas le clic sur un bouton et me retourne toujours None.

    Voici mon code

    Merci d'avance.

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Windows.Media.Imaging;
     
    namespace THALES.SCIPIO.ClientAdmin.Resources
    {
        /// <summary>
        /// Enum des boutons
        /// </summary>
        public enum CWMessageBoxButton
        {
            Ok, YesNo, YesNoCancel, OkCancel
        }
     
        /// <summary>
        /// Enum des icones
        /// </summary>
        public enum CWMessageBoxIcon
        {
            Question, Information, Error, None, Warning
        }
     
        /// <summary>
        /// Classe de la message box personnalisée
        /// </summary>
        public partial class CWMessageBox : ChildWindow
        {
            public delegate void MessageBoxClosedDelegate(MessageBoxResult result);
            public event MessageBoxClosedDelegate OnMessageBoxClosed;
            public MessageBoxResult Result { get; set; }
     
            /// <summary>
            /// Constructeur vide
            /// </summary>
            public CWMessageBox()
            {
                InitializeComponent();
                this.HasCloseButton = false;
                this.Closed += new EventHandler(MessageBoxChildWindow_Closed);
            }
     
            /// <summary>
            /// Constructeur
            /// </summary>
            /// <param name="in_sTitre">Titre de la message box</param>
            /// <param name="in_sMessage">Message de la message box</param>
            /// <param name="in_OptionBouton">Option bouton de la message box</param>
            /// <param name="in_OptionIcone">Option icone de la message box</param>
            public CWMessageBox(string in_sTitre, string in_sMessage, CWMessageBoxButton in_OptionBouton, CWMessageBoxIcon in_OptionIcone)
            {
                InitializeComponent();
                this.HasCloseButton = false;
                this.Closed += new EventHandler(this.MessageBoxChildWindow_Closed);
     
                this.Title = in_sTitre;
                this.txtMsg.Text = in_sMessage;
                this.ChargerButtons(in_OptionBouton);
                this.ChargerIcone(in_OptionIcone);
            }
     
            /// <summary>
            /// Affichage des boutons selon l'option choisie
            /// </summary>
            /// <param name="in_OptionBouton">Option des boutons à afficher</param>
            private void ChargerButtons(CWMessageBoxButton in_OptionBouton)
            {
                switch (in_OptionBouton)
                {
                    case CWMessageBoxButton.Ok:
                        btnOK.Visibility = Visibility.Visible;
                        btnCancel.Visibility = Visibility.Collapsed;
                        btnNo.Visibility = Visibility.Collapsed;
                        btnYes.Visibility = Visibility.Collapsed;
                        break;
     
                    case CWMessageBoxButton.OkCancel:
                        btnOK.Visibility = Visibility.Visible;
                        btnCancel.Visibility = Visibility.Visible;
                        btnNo.Visibility = Visibility.Collapsed;
                        btnYes.Visibility = Visibility.Collapsed;
                        break;
     
                    case CWMessageBoxButton.YesNo:
                        btnOK.Visibility = Visibility.Collapsed;
                        btnCancel.Visibility = Visibility.Collapsed;
                        btnNo.Visibility = Visibility.Visible;
                        btnYes.Visibility = Visibility.Visible;
                        break;
     
                    case CWMessageBoxButton.YesNoCancel:
                        btnOK.Visibility = Visibility.Collapsed;
                        btnCancel.Visibility = Visibility.Visible;
                        btnNo.Visibility = Visibility.Visible;
                        btnYes.Visibility = Visibility.Visible;
                        break;
                }
            }
     
            /// <summary>
            /// Affichage de l'icone selon l'option choisie
            /// </summary>
            /// <param name="in_OptionIcone">Option de l'icone à afficher</param>
            private void ChargerIcone(CWMessageBoxIcon in_OptionIcone)
            {
                switch (in_OptionIcone)
                {
                    case CWMessageBoxIcon.Error:
                        imgIcon.Source = new BitmapImage(new Uri("Error.png", UriKind.Relative));
                        break;
     
                    case CWMessageBoxIcon.None:
                    case CWMessageBoxIcon.Information:
                        imgIcon.Source = new BitmapImage(new Uri("Info.png", UriKind.Relative));
                        break;
     
                    case CWMessageBoxIcon.Question:
                        imgIcon.Source = new BitmapImage(new Uri("Question.png", UriKind.Relative));
                        break;
     
                    case CWMessageBoxIcon.Warning:
                        imgIcon.Source = new BitmapImage(new Uri("warning.png", UriKind.Relative));
                        break;
                }
            }
     
            public static MessageBoxResult Show(string in_sTitre, string in_sMessage, CWMessageBoxButton in_OptionBouton, CWMessageBoxIcon in_OptionIcone)
            {
                CWMessageBox l_CWMessageBox = new CWMessageBox(in_sTitre, in_sMessage, in_OptionBouton, in_OptionIcone);
                l_CWMessageBox.Show();
     
                return l_CWMessageBox.Result;
            }
     
            #region Evenements
            private void OKButton_Click(object sender, RoutedEventArgs e)
            {
                this.Result = MessageBoxResult.OK;
                this.Close();
            }
     
            private void YesButton_Click(object sender, RoutedEventArgs e)
            {
                this.Result = MessageBoxResult.Yes;
                this.Close();
            }
     
            private void CancelButton_Click(object sender, RoutedEventArgs e)
            {
                this.Result = MessageBoxResult.Cancel;
                this.Close();
            }
     
            private void NoButton_Click(object sender, RoutedEventArgs e)
            {
                this.Result = MessageBoxResult.No;
                this.Close();
            }
     
            private void MessageBoxChildWindow_Closed(object sender, EventArgs e)
            {
                if (this.OnMessageBoxClosed != null)
                    this.OnMessageBoxClosed(this.Result);
            } 
            #endregion
        }
    }

  2. #2
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Bonjour,

    Tu hérites de ChildWindow donc tu ne peux utiliser ta fenêtre d'une manière syncrone comme la MessageBox.

    La façon correcte de tester le code de retour d'une ChildWindow est de s'abonner à son évenement Closed.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
                ChildWindow c = new ChildWindow();
                c.Closed += (sender, e) =>
                    {
                        if (c.DialogResult == true )
                        {
                            // ton code après la fermeture de la fenetre
                        }
                    };
     
                c.Show();

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 103
    Par défaut
    oui, j'utilise déjà comme ça ma méthode, mais je voulais de la même maniere que pour les MessageBox faire directement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(MessageBoxResult.Show() == MessageBoxResult.Ok){..}
    Pour éviter d'instancier a chaque fois un nouvel objet!

    Voici ma méthode Show, mais j'ai l'impression qu'elle n'est pas modale!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static MessageBoxResult Show(string in_sTitre, string in_sMessage, CWMessageBoxButton in_OptionBouton, CWMessageBoxIcon in_OptionIcone)
            {
                CWMessageBox l_CWMessageBox = new CWMessageBox(in_sTitre, in_sMessage, in_OptionBouton, in_OptionIcone);
                l_CWMessageBox.Show();
     
                return l_CWMessageBox.Result;
            }

  4. #4
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    La méthode Show de l_CWMessageBox ne peut pas être modale puisque elle fonctionne d'une manière asynchrone comme tout les objets de l'UI de Silverlight.

    En revanche, MessageBox ne fait pas parti de l'UI Silverlight car il est géré par le navigateur proprement dit, ce qui lui confère son caractère modal.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 103
    Par défaut
    Ok, merci, très bien, et bien je vais devoir instancier partout ou j'ai utilisé les MessageBox par mon CWMessageBox O.O!

  6. #6
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Tu peux, je pense, utiliser une classe static pour te faciliter les choses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static class AlertWindow
    {
         public static void Show( string message, System.EventHandler closed )
        {
             ChildWindow c = new ChildWindow();
             c.Content = message;
             c.Closed += closed;
             c.Show();
        }
    }
    Pour l'appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                AlertWindow.Show("Hello", (s, e) =>
                    {
                        // tu mets la suite de ton code ici
                        MessageBox.Show("Closed !");
                    }
                );

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

Discussions similaires

  1. Utiliser un type de donnée personnalisé
    Par Invité dans le forum Services Web
    Réponses: 2
    Dernier message: 10/04/2008, 16h10
  2. Probleme MsgBox /MessageBox.Show
    Par t1marlartiste dans le forum ASP.NET
    Réponses: 4
    Dernier message: 15/05/2007, 08h26
  3. Problème avec MessageBox.Show
    Par A&Nexus dans le forum Windows Mobile
    Réponses: 4
    Dernier message: 02/01/2007, 13h57
  4. [C++] MessageBox :: show
    Par zemeilleurofgreg dans le forum VC++ .NET
    Réponses: 15
    Dernier message: 12/10/2006, 17h16
  5. [C#]MessageBox.Show();
    Par clemsye dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/03/2006, 18h50

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