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

C# Discussion :

Boucle conditionnelle dans un bouton Winforms [Débutant]


Sujet :

C#

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Boucle conditionnelle dans un bouton Winforms
    Bonsoir,
    Je viens de commencer à utiliser visual studio 2015 et j'essaie de créer un petit programme en Windows Forms C#.
    En fonction du résultat d'une comparaison, et en cliquant sur le bouton, l'utilisateur doit pouvoir visualiser l'une ou l'autre des solutions dans le même label.
    J'ai fait les calculs et les boucles dans l'évènement Click du bouton. Pour les calculs, il n'y a pas de problèmes, mais dès que je compile, les labels 9 et 18 ont les valeurs du premier cas et les labels 19 et 20 affichent infini.

    Voici le 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
       if (IVS>IC)
                {
                    double VSSnew = (VSS * IVS) / IC;
                    label9.Text = "Le volume de stockage optimal de Super est :";
                    label19.Text = VSSnew.ToString();
                }
                else
                {
                    label9.Text = "Le volume actuel de Super est acceptable. Vous pouvez l'augmenter mais pas le diminuer si vous le voulez.";
                    label19.Text = "";
                }
     
                if (IVG > IC)
                {
                    double VSGnew = (VSG * IVG) / IC;
                    label18.Text = "Le volume de stockage optimal de Super est :";
                    label20.Text = VSGnew.ToString();
                }
                else
                {
                    label18.Text = "Le volume actuel de Super est acceptable. Vous pouvez l'augmenter mais pas le diminuer si vous le voulez.";
                    label20.Text = "";
                }
    S'il vous plaît, pouvez-vous m'aider?
    Merci d'avance.

  2. #2
    Membre actif
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2016
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 154
    Points : 268
    Points
    268
    Par défaut
    Bonjour mon cher,
    la metfhode ToString est une methode virtuelle heritée de la classe System.objet qui permet de rendre le nom de l'objet. il me semble que tu doives le redefinir pour qu'il te rende ce que tu desires. Par ta difficulté avec la boucle je n'arrive pas à bien la cerner.

    Merci et bon courage. Je suis debutant comme toi.

  3. #3
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 018
    Points
    2 018
    Par défaut
    Bonjour

    Juste après compilation, et tant que le bouton n'a pas été cliqué, tous ces labels affichent soit
    -La valeur que vous avez saisi dans l’éditeur de propriété de visual studio dans la case "Text" du Label
    -Le text que vous avez initialisé dans la méthode public Form1()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public Form1()
            {
    InitializeComponent();
     
    Label9.Text = "votre initialisation" ;
     
    ...suite des init
    }


    Après petite remarque, vous semblez utiliser 2 labels cote à cote
    vous pouvez remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     label9.Text = "Le volume de stockage optimal de Super est :";
                    label19.Text = VSSnew.ToString();
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     label9.Text = "Le volume de stockage optimal de Super est : " + VSSnew.ToString() ;
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  4. #4
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Réponse
    Bonjour,
    Merci pour vos réponses.
    L'utilisation d'un seul label est en effet un excellent raccourci, mais le résultat reste le même.
    Dans la boucle conditionnelle, le texte à afficher dans un label dépend du résultat de comparaison, cependant, le label affiche tout le temps "le volume optimal de super/gazoil est :", et VSSnew et VSGnew = infini quelque soit les valeurs entrées par l'utilisateur dans les textbox.

    Je ne comprend pas, devrais-je ajouter des évènements aux labels, aux textbox ou au bouton? Je n'ai mis actuellement que l'évènement Click du bouton.

    Merci de m'éclairer.

  5. #5
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Puisque nous n'avons pas le code complet sous les yeux, je t'invite dans un 1er temps à coder la vérification de conformité des chiffres saisis par l'utilisateur avant de vouloir travailler avec des opérateurs mathématiques.....
    Ensuite, si tu veux vraiment des éléments de réponse pertinents : postez davantage de code et soyez plus précis sur le résultat que vous souhaitez obtenir car dans tous les cas la solution réside dans l'énoncé du problème lorsqu'il est bien explicité !

    A+

  6. #6
    Membre actif
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2016
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 154
    Points : 268
    Points
    268
    Par défaut
    je t'invite dans un 1er temps à coder la vérification de conformité des chiffres saisis par l'utilisateur avant de vouloir travailler avec des opérateurs mathématiques.....
    Je trouve que Wallace1 a raison. Si l'evaluation de ta boucle renvoie le meme resultat alors tu devrais avoir un pb de formulation et par consequent on ne peut t'aider sans voir ton code entièrement. Et par ailleurs que comptes tu obtenir avec la methode ToString (une valeur numerique ou alphabetique) ?

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    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
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            private void tbxVMS_TextChanged(object sender, EventArgs e)
            {
                if ((tbxVMS.Text.Length != 0) && (tbxVMG.Text.Length != 0) && (tbxVSS.Text.Length != 0) && (tbxVSG.Text.Length != 0) && (tbxNPS.Text.Length != 0) && (tbxNPG.Text.Length != 0) && (tbxSmin.Text.Length != 0))
                {
                    OK.Enabled = true;
                }
                else
                {
                    OK.Enabled = false;
                }
            }
     
            private void tbxVMG_TextChanged(object sender, EventArgs e)
            {
                if ((tbxVMS.Text.Length != 0) && (tbxVMG.Text.Length != 0) && (tbxVSS.Text.Length != 0) && (tbxVSG.Text.Length != 0) && (tbxNPS.Text.Length != 0) && (tbxNPG.Text.Length != 0) && (tbxSmin.Text.Length != 0))
                {
                    OK.Enabled = true;
                }
                else
                {
                    OK.Enabled = false;
                }
            }
     
            private void tbxVSS_TextChanged(object sender, EventArgs e)
            {
                if ((tbxVMS.Text.Length != 0) && (tbxVMG.Text.Length != 0) && (tbxVSS.Text.Length != 0) && (tbxVSG.Text.Length != 0) && (tbxNPS.Text.Length != 0) && (tbxNPG.Text.Length != 0) && (tbxSmin.Text.Length != 0))
                {
                    OK.Enabled = true;
                }
                else
                {
                    OK.Enabled = false;
                }
            }
     
            private void tbxVSG_TextChanged(object sender, EventArgs e)
            {
                if ((tbxVMS.Text.Length != 0) && (tbxVMG.Text.Length != 0) && (tbxVSS.Text.Length != 0) && (tbxVSG.Text.Length != 0) && (tbxNPS.Text.Length != 0) && (tbxNPG.Text.Length != 0) && (tbxSmin.Text.Length != 0))
                {
                    OK.Enabled = true;
                }
                else
                {
                    OK.Enabled = false;
                }
            }
     
            private void tbxNPS_TextChanged(object sender, EventArgs e)
            {
                if ((tbxVMS.Text.Length != 0) && (tbxVMG.Text.Length != 0) && (tbxVSS.Text.Length != 0) && (tbxVSG.Text.Length != 0) && (tbxNPS.Text.Length != 0) && (tbxNPG.Text.Length != 0) && (tbxSmin.Text.Length != 0))
                {
                    OK.Enabled = true;
                }
                else
                {
                    OK.Enabled = false;
                }
            }
     
            private void tbxNPG_TextChanged(object sender, EventArgs e)
            {
                if ((tbxVMS.Text.Length != 0) && (tbxVMG.Text.Length != 0) && (tbxVSS.Text.Length != 0) && (tbxVSG.Text.Length != 0) && (tbxNPS.Text.Length != 0) && (tbxNPG.Text.Length != 0) && (tbxSmin.Text.Length != 0))
                {
                    OK.Enabled = true;
                }
                else
                {
                    OK.Enabled = false;
                }
            }
     
            private void tbxSmin_TextChanged(object sender, EventArgs e)
            {
                if ((tbxVMS.Text.Length != 0) && (tbxVMG.Text.Length != 0) && (tbxVSS.Text.Length != 0) && (tbxVSG.Text.Length != 0) && (tbxNPS.Text.Length != 0) && (tbxNPG.Text.Length != 0) && (tbxSmin.Text.Length != 0))
                {
                    OK.Enabled = true;
                }
                else
                {
                    OK.Enabled = false;
                }
            }
     
            private void OK_Click(object sender, EventArgs e)
            {
                // Déclaration des variables principales //
     
                float VMS, VMG, VSS, VSG;
                int Smin, NPG, NPS;
     
                // Conversion des caratères en nombre //
     
                VMS = float.Parse (tbxVMS.Text);
                VSS = float.Parse (tbxVSS.Text);
                NPS = int.Parse (tbxNPS.Text);
                VMG = float.Parse (tbxVMG.Text);
                VSG = float.Parse (tbxVSG.Text);
                NPG = int.Parse (tbxNPG.Text);
                Smin = int.Parse (tbxSmin.Text);
     
                // Calcul des sommes //
     
                float VM = VMS + VMG;
                float VS = VSS + VSG;
                int NP = NPS + NPG;
     
                // Calcul des Indices de Volumes //
     
                float IC = 1 / Smin;
                float IVS = VMS /(30 * VSS);
                float IVG = VMG /(30 * VSG);
     
                // Solutions Volumes //
     
                float VSSnew = (VSS * IVS) / IC;
                float VSGnew = (VSG * IVG) / IC;
     
                if (IVS>IC)
                {
                    label9.Text = "Le volume de stockage optimal de Super est :  " + VSSnew.ToString ();
                }
                else
                {
                    label9.Text = "Le volume actuel de Super est acceptable. Vous pouvez l'augmenter mais pas le diminuer si vous le voulez.";
                }
     
                if (IVG > IC)
                {                
                    label18.Text = "Le volume de stockage optimal de Super est :  " + VSGnew.ToString ();
                }
                else
                {
                    label18.Text = "Le volume actuel de Super est acceptable. Vous pouvez l'augmenter mais pas le diminuer si vous le voulez.";
                }
            }
        }
    Tostring c'est pour avoir une valeur alphabétique.
    J'ai déjà essayé des calculs simples sur windows forms et n'es rencontré aucun problème.

  8. #8
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Tu devrai faire du pas à pas en mode debug et vérifier le résultat de chacune de tes ligne de code, tu trouvera vite d’où le provient problème.

  9. #9
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bonsoir et bon dimanche,
    C'est ce que j'ai fait. Je pense que le problème est qu'il faut arrondir VSSnew et VSGnew, c'est-à-dire comme par exemple 1/3=0.333333 à l'infini.
    Cependant ni la fonction ROUND(), ni System.Math n'existent dans ma bibliothèque de Visual Studio 2015.
    S'il vous plaît, que dois-je faire?

  10. #10
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    Ajoute un using System; en haut de ton source pour avoir accés à la fonction Math.Round() (msdn).

    Bonne continuation.

    Edit : Sinon, si tu veux arrondir juste pour l'affichage, je te conseille quand même de formater ton numérique avec le ToString() : msdn.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  11. #11
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci pour cette dernière réponse.
    J'ai fini par trouver le problème: IC était calculé comme entier, c'est pour ça que mes divisions donnaient infini. La boucle if n'avait aucun problème.

    Merci pour votre aide à tous, vos réponses m'ont été très utiles.

  12. #12
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Juste deux remarques :

    1- if n'est pas une boucle c'est un opérateur ; un while ou un for permettent d'exécuter en boucle.
    2 - Au lieu de dupliquer ton code factorise au maximum et mets le dans une fonction :
    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
     
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            private void tbxVMS_TextChanged(object sender, EventArgs e)
            {
                this.ControleActivationBoutonOK();
            }
     
            private void ControleActivationBoutonOK()
            {
                OK.Enabled = (tbxVMS.Text.Length != 0) && (tbxVMG.Text.Length != 0) && (tbxVSS.Text.Length != 0) && (tbxVSG.Text.Length != 0) && (tbxNPS.Text.Length != 0) && (tbxNPG.Text.Length != 0) && (tbxSmin.Text.Length != 0);
            }
     
            private void tbxVMG_TextChanged(object sender, EventArgs e)
            {
                this.ControleActivationBoutonOK();
            }
     
            private void tbxVSS_TextChanged(object sender, EventArgs e)
            {
                this.ControleActivationBoutonOK();
            }
     
            private void tbxVSG_TextChanged(object sender, EventArgs e)
            {
               this.ControleActivationBoutonOK();
            }
     
            private void tbxNPS_TextChanged(object sender, EventArgs e)
            {
                this.ControleActivationBoutonOK();
            }
     
            private void tbxNPG_TextChanged(object sender, EventArgs e)
            {
                this.ControleActivationBoutonOK();
            }
     
            private void tbxSmin_TextChanged(object sender, EventArgs e)
            {
               this.ControleActivationBoutonOK();
            }
     
            private void OK_Click(object sender, EventArgs e)
            {
                // Déclaration des variables principales //
     
                float VMS, VMG, VSS, VSG;
                int Smin, NPG, NPS;
     
                // Conversion des caratères en nombre //
     
                VMS = float.Parse (tbxVMS.Text);
                VSS = float.Parse (tbxVSS.Text);
                NPS = int.Parse (tbxNPS.Text);
                VMG = float.Parse (tbxVMG.Text);
                VSG = float.Parse (tbxVSG.Text);
                NPG = int.Parse (tbxNPG.Text);
                Smin = int.Parse (tbxSmin.Text);
     
                // Calcul des sommes //
     
                float VM = VMS + VMG;
                float VS = VSS + VSG;
                int NP = NPS + NPG;
     
                // Calcul des Indices de Volumes //
     
                float IC = 1 / Smin;
                float IVS = VMS /(30 * VSS);
                float IVG = VMG /(30 * VSG);
     
                // Solutions Volumes //
     
                float VSSnew = (VSS * IVS) / IC;
                float VSGnew = (VSG * IVG) / IC;
     
                if (IVS>IC)
                {
                    label9.Text = "Le volume de stockage optimal de Super est :  " + VSSnew.ToString ();
                }
                else
                {
                    label9.Text = "Le volume actuel de Super est acceptable. Vous pouvez l'augmenter mais pas le diminuer si vous le voulez.";
                }
     
                if (IVG > IC)
                {                
                    label18.Text = "Le volume de stockage optimal de Super est :  " + VSGnew.ToString ();
                }
                else
                {
                    label18.Text = "Le volume actuel de Super est acceptable. Vous pouvez l'augmenter mais pas le diminuer si vous le voulez.";
                }
            }
        }
    Ca t'évitera de changer 10 fois le même truc plus tard

    A+

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

Discussions similaires

  1. [Débutant] Drag&Drop Bouton dans une textbox Winform
    Par Welgriv dans le forum Windows Forms
    Réponses: 1
    Dernier message: 11/12/2013, 09h07
  2. Boucle conditionnelle pour état de boutons.
    Par lesailesbleues dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 26/11/2007, 13h10
  3. Réponses: 0
    Dernier message: 12/11/2007, 21h59
  4. boucle for dans un if...
    Par SylverFox dans le forum Débuter
    Réponses: 3
    Dernier message: 11/08/2004, 16h57
  5. Boucle for dans un script cmd
    Par nicolas.ganache dans le forum Développement
    Réponses: 4
    Dernier message: 19/07/2004, 16h07

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