C# Hesap Makinesi Sorun var

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:

EmreAladag32

Doçent
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
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.
 
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:

EmreAladag32

Doçent
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.
 
Üst