Calc..

Résolu
cs_Machjaghjolu Messages postés 92 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 10 octobre 2005 - 29 juil. 2005 à 11:41
cs_Machjaghjolu Messages postés 92 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 10 octobre 2005 - 31 juil. 2005 à 16:52
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

Fildomen Messages postés 805 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 30 octobre 2010
29 juil. 2005 à 14:19
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
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
29 juil. 2005 à 15:27
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..
}
3
Fildomen Messages postés 805 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 30 octobre 2010
31 juil. 2005 à 11:32
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
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
31 juil. 2005 à 16:23
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.
3

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

Posez votre question
cs_RMI Messages postés 305 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 2 août 2010 2
29 juil. 2005 à 13:51
A quoi te sert

Sortie.Text += "1";
??
Théo
0
cs_Machjaghjolu Messages postés 92 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 10 octobre 2005
29 juil. 2005 à 13:55
À afficher dans la Textbox la valeur 1 à la suite de ce qui a déjà été entré dans la TextBox.
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
29 juil. 2005 à 14:52
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.
0
cs_Machjaghjolu Messages postés 92 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 10 octobre 2005
29 juil. 2005 à 15:01
Exact ! Thansk mea culpa
0
cs_Machjaghjolu Messages postés 92 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 10 octobre 2005
29 juil. 2005 à 15:02
Lutinore, je viens de voir le message, je vais essayé car jamais utilisé
0
cs_Machjaghjolu Messages postés 92 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 10 octobre 2005
29 juil. 2005 à 15:21
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é
0
cs_Machjaghjolu Messages postés 92 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 10 octobre 2005
29 juil. 2005 à 15:47
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;

}
0
Fildomen Messages postés 805 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 30 octobre 2010
29 juil. 2005 à 16:03
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
0
cs_Machjaghjolu Messages postés 92 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 10 octobre 2005
29 juil. 2005 à 16:11
Hein Je débute lol
0
Fildomen Messages postés 805 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 30 octobre 2010
29 juil. 2005 à 19:52
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
0
Fildomen Messages postés 805 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 30 octobre 2010
29 juil. 2005 à 19:54
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
0
cs_Machjaghjolu Messages postés 92 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 10 octobre 2005
30 juil. 2005 à 11:50
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)
0
Fildomen Messages postés 805 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 30 octobre 2010
30 juil. 2005 à 12:16
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
0
cs_Machjaghjolu Messages postés 92 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 10 octobre 2005
30 juil. 2005 à 14:47
Ok merci: )
0
cs_Machjaghjolu Messages postés 92 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 10 octobre 2005
30 juil. 2005 à 17:04
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 :/
0
cs_Machjaghjolu Messages postés 92 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 10 octobre 2005
30 juil. 2005 à 17:15
J'ai dis une connerie laissez tomber lol (enfin normalement...)
0
Rejoignez-nous