Windows Forms C# Hesap Makinesi Uygulaması


Gelişmiş Hesap Makinesi

Tüm rakam düğmeleri bir olaya bağlanabilir. Böylece yazılacak kod satırı azaltılmış olur.

4×5 adet düğme ve 1 adet TextBox eklenir.

Düğme yazıları Windows ve “.” simgesi ile açılan pencereden seçilebilir. 

namespace gelismisHesap
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        //global değişkenlerimiz
        String aSayisi = "0", bSayisi = "0";
        String islem = "";
        String sonuc = "0";


        private void button7_Click(object sender, EventArgs e)
        {
            //tüm sayılar aynı Click olayına bağlı
            Button tiklanan = (Button)sender;
            //MessageBox.Show(tiklanan.Text);
            
            tusBasimi(tiklanan.Text);
           
        }


        private void tusBasimi(String gelen)
        {	//eğer tıklanan virgül ise ve metin içinde , varsa
            	//eklemeyi atlasın
            if (gelen == "," && textBox1.Text.Contains(","))
            {
			//zaten sayı içinde , varsa bir işlem yapmasın
            }
            else
            {
                if (textBox1.Text == "0" && gelen != ",")
                    textBox1.Text = gelen;
                else
                    textBox1.Text = textBox1.Text + gelen;
 	//textBox1.Text += tiklanan.Text;
            		//iki yöntem de aynı şekilde çalışır
            		//metin kutusunun sağına gelen sayı eklenir
            }
        }


        private void button3_Click(object sender, EventArgs e)
        {
            //C tuşu - son yazılan sayıyı temizleme clear, CE - tüm işlemleri sıfırlamalı
            textBox1.Text = "0";
        }


        private void button1_Click(object sender, EventArgs e)
        {
            //+- düğmesi, 0 varsa önüne - eklenmemeliydi
            String metin = textBox1.Text;
            //her karakter char türünde ' kullanılır
            if (metin[0] == '-')
            {
                textBox1.Text = metin.Substring(1); 	//- olmayan halini aldık
            }
            else
            {
                textBox1.Text = "-" + textBox1.Text; 	//metin önüne - ekledik
            }
        }


        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            //Form1'in KeyPreview özelliği true olmalı!


            //klavye tuşları yakalama, internetten alıntı
            if ((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) ||
                (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9) ||
                e.KeyCode == Keys.Decimal)
            {
                //sayısal tuşlar ve , basıldıysa
		   //	0 basınca 48 rakamı dönüyor, 48-48=0 , 49-48=1 …
                String basilan = ((int)e.KeyValue - 48).ToString();
                //sağ taraftaki klavye tuşları da var!


                tusBasimi(basilan);
            }
        }


        private void button8_Click(object sender, EventArgs e)
        {
            //4 hesaplama düğmesi / * - +
            String gelen = ((Button)sender).Tag.ToString();
            //Tag özelliği istenilen şekilde kod kısmında kullanılabilir
            switch (gelen)
            {
                case "/":
                    aSayisi = textBox1.Text;
                    islem = "/";
                    textBox1.Text = "0";
                    break;
                case "*":
                    aSayisi = textBox1.Text;
                    islem = "*";
                    textBox1.Text = "0";
                    break;
                case "+":
                    aSayisi = textBox1.Text;
                    islem = "+";
                    textBox1.Text = "0";
                    break;
                case "-":
                    aSayisi = textBox1.Text;
                    islem = "-";
                    textBox1.Text = "0";
                    break;
            }
        }


        private void button19_Click(object sender, EventArgs e)
        {
            //Enter yani = tuşu
            bSayisi = textBox1.Text;


            switch (islem)
            {
                case "/":
                    sonuc = (Convert.ToDouble(aSayisi) / Convert.ToDouble(bSayisi)).ToString();
                    //bir sayı / 0 olunca sonsuz simgesi çıkar, hataya neden oluyor.
                    textBox1.Text = sonuc;
                    islem = "";
                    aSayisi = "0";
                    bSayisi = "0";
                    break;
                case "*":
                    sonuc = (Convert.ToDouble(aSayisi) * Convert.ToDouble(bSayisi)).ToString();
                    textBox1.Text = sonuc;
                    islem = "";
                    aSayisi = "0";
                    bSayisi = "0";
                    break;
                case "+":
                    sonuc = (Convert.ToDouble(aSayisi) + Convert.ToDouble(bSayisi)).ToString();
                    textBox1.Text = sonuc;
                    islem = "";
                    aSayisi = "0";
                    bSayisi = "0";
                    break;
                case "-":
                    sonuc = (Convert.ToDouble(aSayisi) - Convert.ToDouble(bSayisi)).ToString();
                    textBox1.Text = sonuc;
                    islem = "";
                    aSayisi = "0";
                    bSayisi = "0";
                    break;
                default:
                    break;
            }
        }
    }
}

Basit Hesap Makinesi

Bu örnekte her sayı için düğme eklenmedi, doğrudan nümerik girişlere yazılır.

2 numericUpDown, 1 metin kutusu, 3 etiket, 4 radyo düğmesi, 2 düğme eklenir. 

Radyo düğmeleri normalde yuvarlak 🔘 simgeli iken Appearance özelliğini Button olarak seçtik. Tüm hesap radyo düğmeleri “Hesapla” düğmesinin tıklanmasına bağlıdır.

Enter ve ESC tuşları formun AcceptButton -> Hesapla ve CancelButton -> Temizle özellikleri ile bağlantılıdır.

Sonuç için metin kutusu sanki bir etiketmiş gibi görünümünü değiştirdik. Gri arka plan, kenarlıkları yok, seçilip kopyalanabilir bir metin kutusu yapıldı.

Nümerik giriş ve çıkışlarda format (sayısal görünüm) düzenlenmiştir. 

namespace basitHesapMakinesi
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        private void button1_Click(object sender, EventArgs e)
        {
            //hesapla düğmesi
            hesapla(); 
//hesapla fonksiyonu Ctrl+. kısa yolu ile açılan pencereden “Yöntemi Ayıkla” diyerek yapılabilir
		//Düzen*Yeniden Düzenle*Metodu Ayıkla
        }


        private void hesapla()
        {
            String islem = radioButton1.Checked ? "topla" : 
radioButton2.Checked ? "cikar" : 
radioButton3.Checked ? "carp" : 
radioButton4.Checked ? "bol" : "";
            // (şart)?true:false -> aynı satır içinde tek satır if (ternary if)
            //if (radioButton1.Checked) islem = "topla";


            decimal aSayisi = 0, bSayisi = 0, sonuc = 0;
            aSayisi = numericUpDown1.Value;
            bSayisi = numericUpDown2.Value;


            switch (islem)
            {
                case "topla":
                    sonuc = aSayisi + bSayisi;
                    break;
                case "cikar":
                    sonuc = aSayisi - bSayisi;
                    break;
                case "carp":
                    sonuc = aSayisi * bSayisi;
                    break;
                case "bol":
                    if (bSayisi != 0)
                        sonuc = aSayisi / bSayisi;
                    else
                        MessageBox.Show("Sıfıra bölünemez", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    break;
                default:
                    break;
            }


            textBox1.Text = String.Format("{0:N10}", sonuc);
        }


        private void button2_Click(object sender, EventArgs e)
        {
            //temizle düğmesi
            numericUpDown1.Value = 0;
            numericUpDown2.Value = 0;
            radioButton1.Checked = true;
            textBox1.Text = "0";
        }


        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            //klavye tuşlarını yakalama, Form’un KeyPreview özelliği True olmalıdır
            if (e.KeyCode == Keys.Add) radioButton1.Checked = true;
            if (e.KeyCode == Keys.Subtract) radioButton2.Checked = true;
            if (e.KeyCode == Keys.Multiply) radioButton3.Checked = true;
            if (e.KeyCode == Keys.Divide) radioButton4.Checked = true;
        }
    }
}

Yorum bırakın

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.