C# Hesap Makinesi Sorun var

Bu konuyu okuyanlar

Gece baykuşu

Doçent
Katılım
13 Ocak 2019
Mesajlar
500
Reaksiyon puanı
291
Puanları
63
Merhabalar arkadaşlar Windows Form Application ile ödev olan basit bir hesap makinesi yaptım. tuşlara tıklandığında sorun yok klavyeden basma ve çıkma özelliğini de ekledim ama klavyeden tuşa bastığım zaman girdiğim sayının soluna klavyeden bastığım sayı ekleniyor bunu nasıl çözebilirim resimden örnekler.
orn.JPG
Bu resimde fare ile bastığımda sorun olmuyor
orn2.JPG
Bu resimde ise 9 tuşuna bir kere basmama rağmen iki tane 9 sayısı çıkıyor nasıl çözebilirim
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üzenleme:

hakaya

Asistan
Katılım
22 Temmuz 2013
Mesajlar
234
Reaksiyon puanı
109
Puanları
43
Kodu görmeden konuya hakim arkadaşlar nasıl yardımcı olabilir bilemiyorum.
 

vigilantemre

Moderatör
Moderatör
Katılım
26 Mayıs 2019
Mesajlar
1,657
Çözümler
1
Reaksiyon puanı
1,677
Puanları
113
Sorun burada ama nasıl çözülür bilemiyorum kodun doğru aslında, sanırım txtSonuc.Text += e.KeyChar; satırına küçük bir parametre girerek çözmemiz gerekiyor.

C#:
if (e.KeyChar >= '0' && e.KeyChar <= '9')

                txtSonuc.Text += e.KeyChar;
 

hakaya

Asistan
Katılım
22 Temmuz 2013
Mesajlar
234
Reaksiyon puanı
109
Puanları
43
Hiç Windows Forms uygulaması yazmadım. Ama şöyle bir şey dikkatimi çekti. Klavyeyi handle eden iki event var: Keydown ve keypress ed. Yani aynı tuş iki farklı event tarafından register ediliyor. Onun için klavye buffer'ında iki kopya mı oluyor acaba?

Not: Berbat Türkçe için kusura bakma. Terminolojinin Türkçesini bilmiyorum.
 

Gece baykuşu

Doçent
Katılım
13 Ocak 2019
Mesajlar
500
Reaksiyon puanı
291
Puanları
63
Hiç Windows Forms uygulaması yazmadım. Ama şöyle bir şey dikkatimi çekti. Klavyeyi handle eden iki event var: Keydown ve keypress ed. Yani aynı tuş iki farklı event tarafından register ediliyor. Onun için klavye buffer'ında iki kopya mı oluyor acaba?

Not: Berbat Türkçe için kusura bakma. Terminolojinin Türkçesini bilmiyorum.
Bir tanesi hocam tuşa basıldığında uygulama kapanması için ama belki çakışma olabilir
Mesaj otomatik birleştirildi:

Klavyeden enter tuşuna bastığım zaman bu kod kısmında hata veriyor
System.FormatException: 'Giriş dizesi doğru biçimde değildi.'
C#:
case "+": txtSonuc.Text = (sonuc + double.Parse(txtSonuc.Text)).ToString(); break;
 
Son düzenleme:

vigilantemre

Moderatör
Moderatör
Katılım
26 Mayıs 2019
Mesajlar
1,657
Çözümler
1
Reaksiyon puanı
1,677
Puanları
113
Değişken türlerini değiştirmeyi deneyin bazen bu tür sorunları bu şekilde çözdüğüm olmuştur. Ama önce projenizi yedekleyin tabi ki.
 

Samet UCA

Profesör
Katılım
3 Ağustos 2012
Mesajlar
3,278
Reaksiyon puanı
2,913
Puanları
113
Projenin tamamını at öyle bakabilirim.
 
Üst