Arreter l'execution d'un programme c#

kingb330 Messages postés 16 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 10 mai 2009 - 20 mars 2009 à 18:38
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 21 mars 2009 à 19:58
Bonjour à tout le monde,
Je suis un ptit nouveau sur le forum donc désoler si ce message a déjà été posté.

Ma question est que lors de l'exécution d'un programme (dans mon cas conversion Decimal-Hexadécimal-Binaire),
lorsque mon programme appel ma méthode validation et qu'il trouve une erreur, il vas dans une méthode qui affaiche mes message d'erreur.
Jusque là, tout marche. Mais, j'aimerais savoir comment faire quand , par exemple, le message d'erreur s'affiche que le traitement s'arrête au leiu de continuer et de faire plein d'erreur de calcul.

Exemple pour être plus clair....

        private byte validation(string chaine)
        {
            int var = 0;

            //si chaine est vide...
            if (chaine == "")
            {
                return valid = 1;
            }
            ...
        }

ensuite elle retourne dans ma méthode message...

private void affichage(byte valid)
        {
            switch (valid)
            {
                case 1:
                    {
                        MessageBox.Show("Aucune chaine entrée");
                        break;
                    }
                    ....
             }

J'aimerais alors qu'au moment ou le message d'erreur s'affiche que le traitement arrête. Merci!

11 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
20 mars 2009 à 18:55
Salut,

Je ne suis pas certains de comprendre où est le problème, mais à priori en "pseudo-code" ça donnerai quelquechose de ce genre (en partant du principe que un retour 0 de la part de la méthode validation signale une valeur valide) :

byte valid = validation(valeur);

// Si la valeur n'est pas
if ( valid != 0)
{
  // Traitement des erreurs
  affichage(...);
  // ...
}
else
{
  // Lancement des calculs
}

/*
coq
MVP Visual C#
CoqBlog
*/
0
kingb330 Messages postés 16 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 10 mai 2009
20 mars 2009 à 19:02
J'avoue que je me suis mal exprimer

Mon programme marche très bien, tout mes calculs de font aussi très bien...
Mon problème est que j'ai plusieurs méthode pour mes différents calcul.
Par exemple, une méthode pour la validation, une méthode pour les message d'erreur, une méthode pour
l'hexadécimal vers le binaire...etc. Quand j'appuie sur un bouton, par exemple pour convertir un binaire en hexa ,et bien
il entre dans ma fonction validation et ensuite dans ma fonction message. Le problême ces que même si je mets un break ou que le message s'affiche, il retourne dans la fonction de mon bouton et il continu le traitement, ce que je ne veux pas. j'aimerais que le traitement arrête lorsque les messages d'erreurs arrive.

merci
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
20 mars 2009 à 19:13
Oui oui, justement c'est bien dans cette optique là que j'ai donné le code : en cas d'erreur on affiche les messages, sinon on lance les calculs.

/*
coq
MVP Visual C#
CoqBlog
*/
0
kingb330 Messages postés 16 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 10 mai 2009
20 mars 2009 à 19:27
J'aimerais bien que ce sois aussi facile, mais je ne peut faire ça. (prof borné...)
Il faut absolument passé comme je l'ai mentionné plus haut :(
merci!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
20 mars 2009 à 19:36
Ben là du coup j'ai peur de ne pas vraiment comprendre la structure du programme.
Tu peux la reproduire ici ? (épurée, le but est de comprendre le flux d'exécution)

/*
coq
MVP Visual C#
CoqBlog
*/
0
kingb330 Messages postés 16 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 10 mai 2009
21 mars 2009 à 03:35
namespace ******************
{
    public partial class Form1 : Form
    {
        string chaine;
        byte valid;
        char[] hexa = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
        public Form1()
        {
            InitializeComponent();

            valid = 0;
        }
        //Bouton décimal
        private void btnDecimal_Click(object sender, EventArgs e)
        {
            string sreponse = "";

            repetition();
            if (chaine[0] == 'B')
            {
                sreponse = Binaire2Decimal(chaine);
                txtDecimal.Text = sreponse;
            }
            else
                if (chaine[0] == '0' && chaine[1] == 'X')
                {
                    sreponse = Hexadecimal2Decimal(chaine);
                    txtDecimal.Text = sreponse;
                }
                else
                {
                    txtDecimal.Text = chaine;
                }
        }
        //Bouton hexadécimal
        private void btnHexadecimal_Click(object sender, EventArgs e)
        {
            string sreponse = "";

            repetition();
            if (chaine[0] == 'B')
            {
                sreponse = Binaire2Decimal(chaine);
                sreponse = Decimal2Hexadecimal(sreponse);
                txtHexadecimal.Text = sreponse;
            }
            else
                if (chaine[0] == '0' && chaine[1] == 'X')
                {
                    txtHexadecimal.Text = chaine;
                }
                else
                {
                    sreponse = Decimal2Hexadecimal(chaine);
                    txtHexadecimal.Text = sreponse;
                }
        }
        //Bouton Binaire
        private void btnBinaire_Click(object sender, EventArgs e)
        {
            string sreponse = "";

            repetition();
            if (chaine[0] == 'B')
            {
                txtBinaire.Text = chaine;
            }
            else
                if (chaine[0] == '0' && chaine[1] == 'X')
                {
                    sreponse = Hexadecimal2Decimal(chaine);
                    sreponse = Decimal2Binaire(sreponse);
                    txtBinaire.Text = sreponse;
                }
                else
                {
                    sreponse = Decimal2Binaire(chaine);
                    txtBinaire.Text = sreponse;
                }
        }
        private void repetition()
        {
            chaine = txtValeur.Text;
            chaine = chaine.ToUpper();
            valid = validation(chaine);
            affichage(valid);
        }
        //Bouton de sortie
        private void btnSortie_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
        //Méthode de validation
        private byte validation(string chaine)
        {
                 icima méthode pour valider mes valeur, si valid = 0 donc valide
        }
        //Affichage de message d'erreur
        private void affichage(byte valid)
        {
            switch (valid)
            {
                case 1:
                    {
                        MessageBox.Show("Nombre hexadécimal incorrect");
                        break;
                    }
                case 2:
                    {
                        MessageBox.Show("Nombre binaire incorrect");
                        break;
                    }
                case 3:
                    {
                        MessageBox.Show("Nombre décimal trop long, dépasse 255");
                        break;
                    }
                case 4:
                    {
                        MessageBox.Show("Chaîne hexdécimal trop longue!");
                        break;
                    }
                case 5:
                    {
                        MessageBox.Show("Aucune chaîne entrée");
                        break;
                    }
                case 6:
                    {
                        MessageBox.Show("Chaine binaire entrée trop longue, 8 bits maximum");
                        break;
                    }
                case 7:
                    {
                        MessageBox.Show("Chaine hexadécimal incorrecte, dépasse 'FF'");
                        break;
                    }
            }
        }
     
        Ensuite ici se trouve mes fonction de calcul....

}
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
21 mars 2009 à 09:00
Donc c'est la méthode "repetition" qui se charge de la validation et de l'affichage de message à l'utilisateur.
Si elle ne peut vraiment pas retourner de valeur permettant d'appliquer le schéma donné plus haut, tu n'as plus qu'à gérer une valeur booléenne que tu testeras avant de lancer les calculs.

Avec un retour, ça pourrait donner (tapé directement ici et donc à remanier avec gestion d'exception & co, c'est juste pour donner une idée) : 
---------------------------------------------
        private bool repetition()
        {
            chaine = txtValeur.Text;
            chaine = chaine.ToUpper();
            valid = validation(chaine);
            affichage(valid);

             return (valid ==0);
        }

        //Bouton décimal
        private void btnDecimal_Click(object sender, EventArgs e)
        {
            string sreponse = "";

            bool saisieEstValide = repetition();
            if (saisieEstValide)
            {
                        if (chaine[0] == 'B')
                        {
                            sreponse = Binaire2Decimal(chaine);
                            txtDecimal.Text = sreponse;
                        }
                        else
                            if (chaine[0] == '0' && chaine[1] == 'X')
                            {
                                sreponse = Hexadecimal2Decimal(chaine);
                                txtDecimal.Text = sreponse;
                            }
                            else
                            {
                                txtDecimal.Text = chaine;
                            }
             }
        }
---------------------------------------------

Sans modificiation du prototype de repetition :
---------------------------------------------

        private bool saisieEstValide = false;

        private void repetition()
        {
            chaine = txtValeur.Text;
            chaine = chaine.ToUpper();
            valid = validation(chaine);
            affichage(valid);

            saisieEstValide  = (valid ==0);
        }

        //Bouton décimal
        private void btnDecimal_Click(object sender, EventArgs e)
        {
            string sreponse = "";

            bool saisieEstValide = repetition();
            if (this.saisieEstValide)
            {
                        if (chaine[0] == 'B')
                        {
                            sreponse = Binaire2Decimal(chaine);
                            txtDecimal.Text = sreponse;
                        }
                        else
                            if (chaine[0] == '0' && chaine[1] == 'X')
                            {
                                sreponse = Hexadecimal2Decimal(chaine);
                                txtDecimal.Text = sreponse;
                            }
                            else
                            {
                                txtDecimal.Text = chaine;
                            }
            }
            
            this.saisieEstValide = false;
        }
---------------------------------------------

/*
coq
MVP Visual C#
CoqBlog
*/
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
21 mars 2009 à 09:02
Bon, la mise en gras ne se voit pas dans l'affichage, on recommence...

Avec un retour, ça pourrait donner (tapé directement ici et donc à remanier avec gestion d'exception & co, c'est juste pour donner une idée) : 
---------------------------------------------
        private bool repetition()
        {
            chaine = txtValeur.Text;
            chaine = chaine.ToUpper();
            valid = validation(chaine);
            affichage(valid);

             return (valid ==0);

        }

        //Bouton décimal
        private void btnDecimal_Click(object sender, EventArgs e)
        {
            string sreponse = "";

            bool saisieEstValide = repetition();
            if (saisieEstValide)
            {
                        if (chaine[0] == 'B')
                        {
                            sreponse = Binaire2Decimal(chaine);
                            txtDecimal.Text = sreponse;
                        }
                        else
                            if (chaine[0] == '0' && chaine[1] == 'X')
                            {
                                sreponse = Hexadecimal2Decimal(chaine);
                                txtDecimal.Text = sreponse;
                            }
                            else
                            {
                                txtDecimal.Text = chaine;
                            }
             }

        }
---------------------------------------------

Sans modificiation du prototype de repetition :
---------------------------------------------

        private bool saisieEstValide = false;

        private void repetition()
        {
            chaine = txtValeur.Text;
            chaine = chaine.ToUpper();
            valid = validation(chaine);
            affichage(valid);

            saisieEstValide  = (valid ==0);
        }

        //Bouton décimal
        private void btnDecimal_Click(object sender, EventArgs e)
        {
            string sreponse = "";

            bool saisieEstValide = repetition();
            if (this.saisieEstValide)
            {

                        if (chaine[0] == 'B')
                        {
                            sreponse = Binaire2Decimal(chaine);
                            txtDecimal.Text = sreponse;
                        }
                        else
                            if (chaine[0] == '0' && chaine[1] == 'X')
                            {
                                sreponse = Hexadecimal2Decimal(chaine);
                                txtDecimal.Text = sreponse;
                            }
                            else
                            {
                                txtDecimal.Text = chaine;
                            }
            }
            
            this.saisieEstValide = false;

        }
---------------------------------------------

/*
coq
MVP Visual C#
CoqBlog
*/
0
kingb330 Messages postés 16 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 10 mai 2009
21 mars 2009 à 19:39
Mais oui j'aurais jamais pensé à ça!
Je test et je vous en reparle merci
0
kingb330 Messages postés 16 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 10 mai 2009
21 mars 2009 à 19:48
C'est absolument parfait,
merci bien a coq pour sa patience
à la prochaine.
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
21 mars 2009 à 19:58
De rien.

/*
coq
MVP Visual C#
CoqBlog
*/
0
Rejoignez-nous