Calc..

Résolu
Signaler
Messages postés
92
Date d'inscription
dimanche 31 octobre 2004
Statut
Membre
Dernière intervention
10 octobre 2005
-
Messages postés
92
Date d'inscription
dimanche 31 octobre 2004
Statut
Membre
Dernière intervention
10 octobre 2005
-
Salute (ui ui encore ..)



J'ai un chtit problème avec ma calculatrice, quand je fais 11 + 11 elle me met 23 .



voici le code du bouton 1.



private void btn1_Click(object sender, System.EventArgs e)

{

Sortie.Text += "1";

if (varOperation == false)

{

varOperande01 = decimal.Parse(Sortie.Text);

}

else

{

varOperande02 = decimal.Parse(Sortie.Text);

switch (varOperationType)

{

case "+":


varRes =
(varOperande01 + varOperande02);


varOperande01
= varRes;

break;



default:


Sortie.Text =
Sortie.Text;

break;

}

}



}



Si quelqu'un a une idée de comment résoudre ça.. Thanks.

Ps: si j'enlève varOperande01 = varRes, ca ne me fait plus ce problème
mais il m'est impossible d'effectuer plus de 2 opérations (11 + 11 = 22
et c'est fini..)

56 réponses

Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010

ben c logique, fé comme ton pc
le premier clique sur 1
varOperande01 devient 1
le dexuième clique sur 1 (pour composer 11)
varOperande01 devient 11
le clique sur + (on efface le textebox sortie)
le troisième clique sur 1
varOperande02 devient 1 mais varOperande01 = 12 ( car tu aditionne)
le quatrième clique sur 1
varOperande02 devient 11 mais varOperande01 = 23 ( car tu aditionne)

c ca??

YaoYao !!
1 + 1 = 10
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
C'est le "sender" qu'il faut caster pas btn1 ou btn2 mais tous tes boutons doivent être abonnés sur cette méthode.

private void NumericButton_Click( object sd, EventArgs args )
{ sortie.Text +( ( Button ) sd ).Text; // Text "1" ou "2" etc..
}
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010

alors, tu peux remplacer

if (_Resultat == false)
par
if (!_Resultat)

tu peux enlever ca si tu ne l'utilise pas, de toutes facons le compilateur va l'effacer
default:
break;

pour les 0123456789, je donne 0 par exemple

tu peux remplacer ca
case "0":
if (_Operation == false)
{
Sortie.Text += "0";
_Operande01 = double.Parse(Sortie.Text);
}
else
{
if (_Efface == false)
{
Sortie.Text = "";
Sortie.Text += "0";
_Operande02 = double.Parse(Sortie.Text);
_Efface = true;
}
else
{
Sortie.Text += "0";
_Operande02 = double.Parse(Sortie.Text);
}
}
par
case "0":
if (_Operation == false)
{
Sortie.Text += "0";
_Operande01 = double.Parse(Sortie.Text);
}
else
{
if (_Efface == false)
{
Sortie.Text = "";
_Efface = true;
}
Sortie.Text += "0";
_Operande02 = double.Parse(Sortie.Text);
}

tu peux remplacer ca

case "=":
switch (_aOperateur)
{
case "+":
Addition();
_Operande02 = 0;
break;
case "-":
Soustraction();
_Operande02 = 0;
break;
case "*":
Multiplication();
_Operande02 = 0;
break;
case "/":
Division();
_Operande02 = 0;
break;
default:
break;
}

break;
par

case "=":
_Operande02 = 0;
switch (_aOperateur)
{
case "+":
Addition();
break;
case "-":
Soustraction();
break;
case "*":
Multiplication();
break;
case "/":
Division();
break;
}
break;

lache les copier coller

une tite remarque
Sortie.Text = "" + _Res;
mieux vaut l'ecrire comme
Sortie.Text = "" + _Res.ToString();
même si ca marche, dans d'autres convertions ca marchera pas, alors c pas difficile de faire un tit .ToString()

Bonne chance...
YaoYao !!
1 + 1 = 10
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Salut, y'a un petit bug dans la version que j'ai téléchargé ce midi, si on tape deux fois de suite égale après une division, c'est rien et en plus te prend pas la tête sur une calculatrice, il faut mieux programmer qlq'chose de plus sympa. Sinon tu peux écrire la fonction Numerique, comme ca:

private void Numerique( object sd, EventArgs e )
{
string txt = ( ( Button )sd ).Text;


if ( txt == "," )
{
Sortie.Text += txt;
}
else
{
if ( _Operation == false )
{
Sortie.Text += txt;
_Operande01 = double.Parse( Sortie.Text );
}
else
{
if ( _Efface == false )
{
Sortie.Text = string.Empty;
Sortie.Text += txt;
_Operande02 = double.Parse( Sortie.Text );
_Efface = true;
}
else
{
Sortie.Text += txt;
_Operande02 = double.Parse( Sortie.Text );
}
}
}
}

C'est peut être plus "compatible" vu que tu as fait des modifs depuis.
Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Statut
Membre
Dernière intervention
2 août 2010
2
A quoi te sert

Sortie.Text += "1";
??
Théo
Messages postés
92
Date d'inscription
dimanche 31 octobre 2004
Statut
Membre
Dernière intervention
10 octobre 2005

À afficher dans la Textbox la valeur 1 à la suite de ce qui a déjà été entré dans la TextBox.
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Salut, je vois que ce projet de calculatrice avance, sais tu que tu peux réduire ton code si tu abonnes plusieurs événements à la même méthode:

private void NumericButton_Click( object sd, EventArgs args )
{
sortie.Text += ( ( Button )sd ).Text; // ou Tag
}

Ca devrait te permettre de revoir la logique de ton programme et donc d'eviter le bug précédent.
Messages postés
92
Date d'inscription
dimanche 31 octobre 2004
Statut
Membre
Dernière intervention
10 octobre 2005

Exact ! Thansk mea culpa
Messages postés
92
Date d'inscription
dimanche 31 octobre 2004
Statut
Membre
Dernière intervention
10 octobre 2005

Lutinore, je viens de voir le message, je vais essayé car jamais utilisé
Messages postés
92
Date d'inscription
dimanche 31 octobre 2004
Statut
Membre
Dernière intervention
10 octobre 2005

Comme je disais, je ne m'en suis jamais servi de cette fonction.



private void NumericClick(object sender, System.EventArgs e)

{

textBox1.Text += ((Button)btn1).Tag + "1";

textBox1.Text += ((Button)btn2).Tag + "2";

}



J'ai rentré ce code et ça m'affiche 1 et 2 à chaque clique.. Or ce que
je voudrais c'est que ça affiche 1 lorsque je clique sur 1, 2 quand je
clique sur 2, etc...



Thanks et désolé
Messages postés
92
Date d'inscription
dimanche 31 octobre 2004
Statut
Membre
Dernière intervention
10 octobre 2005

C'est bon, j'ai regardé la MSDN



http://msdn.microsoft.com/library/fre/default.asp?url=/library/fre/vbcon/html/vbtskrespondingtobuttonwebcontrolevents.asp



Ca donne ça et ça marche, ce n'est que pour tester, maintenant la vraie calculatrice. Merci :)



textBox1.Text += ( (Button)sender).Tag;

switch (((Button)sender).TabIndex)

{

case 1:

textBox1.Text = " lol ";

break;



case 2:

textBox1.Text = "lool";

break;



default:

textBox1.Text = " lool";

break;

}
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010

met attend, pkoi tu te complique la vie, utilise le Controle Microsoft script, par ex, tu lui donne (10 + 5 * 2 - 3 ), et il te réenvoi 17, c mieux nan???

YaoYao !!
1 + 1 = 10
Messages postés
92
Date d'inscription
dimanche 31 octobre 2004
Statut
Membre
Dernière intervention
10 octobre 2005

Hein Je débute lol
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010

Clique droit dans ta barre d'outils
Choose items
clique sur Com dans les onglets en haut
coche ScriptControl Object
Ajoute le dans ta form

maintenant,si le scriptcontrol est nomé SC1
int a Convert.ToInt32(SC.Eval("5+ 6*2")); // a 17

avoila une tit exemple fé que pour toi http://www.csharpfr.com/code.aspx?ID=32959

Bonne chance

YaoYao !!
1 + 1 = 10
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010

euh j'ai oulié de mentioner une chose, si tu met SC1.Eval("msgbox("eee")"), un messagebox s'affiche , alors laisse pas les utilisateurs tapé ce qu'ils veulent, les sin et cos marche aussi

YaoYao !!
1 + 1 = 10
Messages postés
92
Date d'inscription
dimanche 31 octobre 2004
Statut
Membre
Dernière intervention
10 octobre 2005

Ah ! C'est pas mal ça merci ! (Ps je vais me faire une version comme
j'avais commencé et une version comme cella là :D o moins j'apprend lol)
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010

Pour faire comme ce control seul, je te conseille de voir de la partie de la notation polonaise, chercher des docs sur, ca facilite la tache,ca fé 2 ans que mon père m'a montré comment marche le truc mais j'ai oublié lool

Bonne chance

YaoYao !!
1 + 1 = 10
Messages postés
92
Date d'inscription
dimanche 31 octobre 2004
Statut
Membre
Dernière intervention
10 octobre 2005

Ok merci: )
Messages postés
92
Date d'inscription
dimanche 31 octobre 2004
Statut
Membre
Dernière intervention
10 octobre 2005

C'est encore moi, comment je peux faire pour que le résultat quand il
est négatif apparaisse et ne marque pas 0 ? (Je sais que ton script
permet d'éviter mais je parle avec la première méthode).



par exemple : 11 - 12 = 0 ..... au lieu de - 1 :/
Messages postés
92
Date d'inscription
dimanche 31 octobre 2004
Statut
Membre
Dernière intervention
10 octobre 2005

J'ai dis une connerie laissez tomber lol (enfin normalement...)