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 Forms Discussion :

Personnaliser une exception


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut Personnaliser une exception
    reBonjour,

    Je cherche à personnaliser un message d'exception en fonction de différents différents paramètres et je me heurte à une petite (?) difficulté. Voilà mon code:

    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
     
        public partial class Form1 : Form
        {
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                try
                {
                    throw new EntreeSortieException();
                }
                catch (EntreeSortieException entreeSortieException)
                {
                    MessageBox.Show(entreeSortieException.Message);
                }
     
                try
                {
                    throw new EntreeSortieException("Message personnalisé");
                }
                catch (EntreeSortieException entreeSortieException)
                {
                    MessageBox.Show(entreeSortieException.Message);
                }
            }
        }
     
        public class EntreeSortieException : Exception
        {
            public EntreeSortieException()
                : base("Message défini dans la classe") 
            { 
            }
     
            public EntreeSortieException(string message)
                : base(message) 
            {            
            }
     
            public EntreeSortieException(string message, Exception inner) 
                : base(message, inner) 
            { 
            }
     
            protected EntreeSortieException(
              System.Runtime.Serialization.SerializationInfo info,
              System.Runtime.Serialization.StreamingContext context)
                : base(info, context) 
            { 
            }
        }
    Mon application gère différents langages (anglais, français, russe, etc.)
    Je dois donc ajuster chaque message d'erreur en fonction de la langue utilisée.

    Je pensais donc modifier le texte du message dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            public EntreeSortieException(string message)
                : base(message) 
            { 
                  message = "message traduit";
            }
    Mais ça ne fonctionne pas puisqu'a ce moment là, le message est déjà utilisé par basemessage).

    Pour l'instant, j'ai donc inclus la fonction de traduction dans l'appel à base.
    Par exemple dans une autre exception:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        public class InvalidFolderException : Exception
        {
            public InvalidFolderException(string folderName)
                : base( "{0} : " + string.Format( Locale._("invalid folder exception!") , folderName) )
            { }
        }
    Le problème c'est que ça fait vite des paramètres illisibles.
    Alors je me dis que j'ai peut-être loupé une étape importante dans mon apprentissage de cette chose là. Il doit bien y avoir moyen de modifier mon message à ce niveau sans le faire dans le paramètre, non ?

    Votre avis sur la question ?

    Papy

  2. #2
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Je viens de contourner le problème en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        public class InvalidFolderException : Exception
        {
            public static string TexteMessage(string foldername)
            {
                return "{0} : " + string.Format(Locale._("invalid folder exception!"), foldername);
            }
     
            public InvalidFolderException(string folderName)
                : base(TexteMessage(folderName))
            { }
        }
    Mais je sais pas, je trouve pas ça très beau comme façon de coder.

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Septembre 2005
    Messages : 63
    Par défaut
    Pourquoi tu n'utilises pas les fichiers Resource ?

    http://msdn.microsoft.com/fr-fr/libr...fy(VS.80).aspx

  4. #4
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Parce que je ne peux pas. Cette application fait partie d'un ensemble qui utilise un système de traduction particulier.

  5. #5
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Tu y étais presque:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public EntreeSortieException(string message)
            { 
                  Message = "message traduit";
            }

  6. #6
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Erreur 1 La propriété ou l'indexeur 'System.Exception.Message' ne peut pas être assigné -- il est en lecture seule D:\Développements\CSharp\recup mes documents\Les exceptions\Les exceptions\Form1.cs 55 13 Les exceptions


  7. #7
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Mais je sais pas, je trouve pas ça très beau comme façon de coder.
    C'est comme ça que j'aurais fait aussi, sauf que j'aurai mis cette fonction auxiliaire en private voire protected.

  8. #8
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Neptune: Donc, ça revient à ce que j'avais finis par faire et que je trouvais pas top mais si c'est la seule solution ...

    Guulh: Bon, ben je vais me contenter de ça.

    Merci à tous les deux.


  9. #9
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Neptune: Donc, ça revient à ce que j'avais finis par faire et que je trouvais pas top mais si c'est la seule solution ...

    Guulh: Bon, ben je vais me contenter de ça.

    Merci à tous les deux.

    Oui, mais le plus c'est au minimum refactoriser dans une fonction. Le mieux c'est de s'occuper de la traduction avant d'envoyer le message dans l'exception.

  10. #10
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    l'exception pourra être lancée depuis plusieurs endroits du code.
    Et je veux que chaque affichage potentiel d'erreur soit parfaitement identique.
    En faisant comme ça, je réduis le risque de différences entre les messages.
    Sinon, j'aurais pu faire directement chaque fois que c'est nécessaire:

    throw new Exception(Local._("monmessage"));

    et me passer de créer une exception spécifique .

    De plus, nous allons utiliser xgettext pour extraire toutes les chaines localisables de l'application. Là, une seule sera extraite. Sinon, autant de fois que d'appel à l'exception.

    Maintenant, pour la traduction, j'y peux rien. C'est le client qui veut ça

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

Discussions similaires

  1. Récupérer une exception Oracle personnalisée
    Par Franck.H dans le forum VB.NET
    Réponses: 3
    Dernier message: 22/05/2014, 14h47
  2. Renvoyer une exception personnalisée ?
    Par fafax2013 dans le forum Services Web
    Réponses: 1
    Dernier message: 08/04/2013, 11h05
  3. Réponses: 3
    Dernier message: 01/11/2002, 14h30

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