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; } } }