C# hesap makinesi hata var

Yeniçocuk

Kilopat
Katılım
30 Kasım 2018
Mesajlar
5.549
Makaleler
2
Çözümler
13
Merhabalar, ödevim olan hesap makinesi uygulamasını yaptım, sayıları fare ile tıklattığım zaman sorun olmuyor ama klavyeden bir sayıya bastığım zaman soluna sayı ekliyor. Kodun hangi kısmında hata var? Resimdeki örnekte klavyeden 9 tuşuna bastığım zaman soluna bastığım tuşun sayısını ekliyor.

orn2.JPG


C#:
bool optDurum = false;
double sonuc = 0;
string opt = "";

public Form1()
{
InitializeComponent();
}

private void RakamOlay(object sender, EventArgs e)
{
if (txtSonuc.Text == "0" || optDurum)
txtSonuc.Clear();

optDurum = false;
Button btn = (Button)sender;
txtSonuc.Text += btn.Text;
}

private void optHesap(object sender, EventArgs e)
{
optDurum = true;
Button btn = (Button)sender;
string yeniOpt = btn.Text;
lblSonuc.Text = lblSonuc.Text + " " +txtSonuc.Text+" "+yeniOpt;

switch(opt)
{
case "+":txtSonuc.Text = (sonuc + Double.Parse(txtSonuc.Text)).ToString(); break;
case "-": txtSonuc.Text = (sonuc - Double.Parse(txtSonuc.Text)).ToString(); break;
case "*": txtSonuc.Text = (sonuc * Double.Parse(txtSonuc.Text)).ToString(); break;
case "/": txtSonuc.Text = (sonuc / Double.Parse(txtSonuc.Text)).ToString(); break;
}
sonuc = Double.Parse(txtSonuc.Text);
txtSonuc.Text = sonuc.ToString();
opt = yeniOpt;
}

private void button11_Click(object sender, EventArgs e)
{
txtSonuc.Clear();
lblSonuc.Text = "";
opt = "";
sonuc = 0;
optDurum = false;

}

private void button17_Click(object sender, EventArgs e)
{
lblSonuc.Text = "";
optDurum = true;
switch (opt)
{
case "+": txtSonuc.Text = (sonuc + Double.Parse(txtSonuc.Text)).ToString(); break;
case "-": txtSonuc.Text = (sonuc - Double.Parse(txtSonuc.Text)).ToString(); break;
case "*": txtSonuc.Text = (sonuc * Double.Parse(txtSonuc.Text)).ToString(); break;
case "/": txtSonuc.Text = (sonuc / Double.Parse(txtSonuc.Text)).ToString(); break;
}

sonuc = Double.Parse(txtSonuc.Text);
txtSonuc.Text = sonuc.ToString();
opt = " ";
}

private void button12_Click(object sender, EventArgs e)
{
if (txtSonuc.Text == "0")
txtSonuc.Text = "0";
else if (optDurum)
txtSonuc.Text = "0";
if (!txtSonuc.Text.Contains(","))
txtSonuc.Text += ",";
optDurum = false;
}

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
this.Close();
}

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar >= '0' && e.KeyChar <= '9')
txtSonuc.Text += e.KeyChar;
if (e.KeyChar == '+')
button13.PerformClick();
if (e.KeyChar == '-')
button14.PerformClick();
if (e.KeyChar == '*')
button15.PerformClick();
if (e.KeyChar == '/')
button16.PerformClick();
if (e.KeyChar == ',')
button12.PerformClick();
if (e.KeyChar == 13)
button17.PerformClick();

}

}
}
 
Son düzenleyen: Moderatör:
Öncelikle belirtmek istiyorum Java ve C++ bilmeme rağmen C# bilgim yok denecek kadar az. Ancak sanırım bir iki hata gördüğümü düşünüyorum ilki txtSonuc değişkenini 2 kez append ediyorsunuz gibi duruyor ( txtSonuc.Text += btn.Text; ) .

İkincisi ise;
if (e.KeyChar == 13)
button17.PerformClick();

kısmında 13 gibi bir key olduğunu düşünmüyorum eğer Java daki gibi operate ediliyorsa ilginç hatalara sahne olabilir.

Tabi hatalı olabilirim Java mantığına göre düşündüm. Kolay gelsin.
 
Öncelikle belirtmek istiyorum Java ve C++ bilmeme rağmen C# bilgim yok denecek kadar az. Ancak sanırım bir iki hata gördüğümü düşünüyorum ilki txtsonuc değişkenini 2 kez append ediyorsunuz gibi duruyor ( txtsonuc. Text += btn. Text; ).

İkincisi ise;
İf (e. Keychar == 13)
button17.PerformClick();

Kısmında 13 gibi bir Key olduğunu düşünmüyorum eğer Java'daki gibi Opera'te ediliyorsa ilginç hatalara sahne olabilir?

Tabi hatalı olabilirim Java mantığına göre düşündüm. Kolay gelsin.

Keychar kısmında hocam ascıı karşılığı gelen enter tuşu ve klavyeden veri girdiğinizde sonucu göstermek için yaptığım şey diğerine ise bir bakacağım.
 

Geri
Yukarı