GÖRSEL PROGRAMLAMA II Visual Studio 2010 veya 2013, Sharp Develop 3.2 programlarını kurabilirsiniz. Başlat/Programlar/Microsoft Visual Studio 2010 çalıştırılır. Açılan programda New Project seçilir, sol menüden Visual C# ve ortadaki kısımdan Windows Forms Application seçilir. Ekrana programımızın form tasarım (Form1) ekranı gelir. Örnek: Klavyeden girilen iki sayıyı toplayıp sonucu label da gösterme. int sayi1, sayi2, sonuc; sayi1 = Convert.ToInt32(textBox1.Text); sayi2 = Convert.ToInt32(textBox2.Text); sonuc = sayi1 + sayi2; label4.text = sonuc.tostring(); Örnek: Klavyeden girilen iki sayıyı toplayıp, çarpıp, çıkarıp, bölen ve sonucu label da gösteren program. int sayi1, sayi2, sonuc; sayi1 = Convert.ToInt32(textBox1.Text); sayi2 = Convert.ToInt32(textBox2.Text); sonuc = sayi1 + sayi2; label4.text = sonuc.tostring(); private void button2_click(object sender, EventArgs e) int sayi1, sayi2, sonuc;
sayi1 = Convert.ToInt32(textBox1.Text); sayi2 = Convert.ToInt32(textBox2.Text); sonuc = sayi1 * sayi2; label4.text = sonuc.tostring(); private void button3_click(object sender, EventArgs e) int sayi1, sayi2, sonuc; sayi1 = Convert.ToInt32(textBox1.Text); sayi2 = Convert.ToInt32(textBox2.Text); sonuc = sayi1 - sayi2; label4.text = sonuc.tostring(); private void button4_click(object sender, EventArgs e) int sayi1, sayi2, sonuc; sayi1 = Convert.ToInt32(textBox1.Text); sayi2 = Convert.ToInt32(textBox2.Text); sonuc = sayi1 / sayi2; label4.text = sonuc.tostring(); TÜR DÖNÜŞÜMLERİ Klavyeden girilen her değer string ifadedir. Matematiksel işlem yaptırmak için bu ifadenin sayısal bir türe dönüştürülmesi gerekir. İşlem yaptırıldıktan sonra sonucu bir nesnede göstermek istiyorsak tekrar tür dönüşümü ile sayısal değeri stringe dönüştürmemiz gerekir. String değişkeni sayısal değişken türüne dönüştürmek için 2 yol vardır. 1. Yol: Convert Metodu: Convert.ToByte(degisken_adi)>> stringi byte türüne dönüştürür. Convert.ToChar(degisken_adi)>> stringi char türüne dönüştürür. Convert.ToDouble(degisken_adi)>>stringi double türüne dönüştürür. Convert.ToSingle(degisken_adi)>> stringi float türüne dönüştürür. Convert.ToInt32(degisken_adi)>> stringi int türüne dönüştürür. Convert.ToSbyte(degisken_adi)>> stringi sbyte türüne dönüştürür. Convert.ToUInt32(degisken_adi)>> stringi uint türüne dönüştürür. Convert.ToUInt64(degisken_adi)>> stringi ulong türüne dönüştürür. Convert.ToInt16(degisken_adi)>> stringi short türüne dönüştürür. 2. Yol: Parse Metodu: Int16.Parse(degisken_adi) >> stringi short türüne dönüştürür. Int32.Parse(degisken_adi) >> stringi int türüne dönüştürür. Byte.Parse(degisken_adi) >> stringi byte türüne dönüştürür. Double.Parse(degisken_adi) >> stringi double türüne dönüştürür. Örn: int sayi; sayi=convert.toint32(textbox1.text); Sayısal Değişkeni String e dönüştürme: Sayısal bir değişkeni bir nesnede göstermek için String e dönüştürülmesi gerekir. Örn: int ort=65; label1.text=ortalama.tostring();//int tipindeki ortalama değişkenini stringe dönüştürür
Örnek: klavyeden girilen 2 yazılı ve 1 sözlü notuna göre HESAPLA BUTONUNA TIKLANDIĞINDA ortalamayı hesaplayıp. Label da gösteren programı yazınız? byte yazili1, yazili2, sozlu; int ort; yazili1 = Convert.ToByte(textBox1.Text); yazili2 = Convert.ToByte(textBox2.Text); sozlu = Convert.ToByte(textBox3.Text); ort = (yazili1 + yazili2 + sozlu) / 3; label5.text = ort.tostring(); Ödev: vize ve final notu klavyeden girilip hesapla butonuna tıklandığında label da ortalamayı gösteren programı yazınız? int vize, final, ort; vize = Convert.ToInt32(textBox1.Text); final = Convert.ToInt32(textBox2.Text); ort = vize * 40 / 100 + final * 60 / 100; label5.text = ort.tostring(); Değişkenleri Public Yapma Tanımlanan değişkenleri diğer sınıflarda(class) kullanabilmek için Public Static yapılmalıdır. Değişkenin önüne bir şey yazılmazsa Private kabul edilir ve yalnızca tanımlandığı sınıfta çalışır. Değişkeni Public yapmada amaç; değişkeni bir defa tanımlayıp, programın bütün sınıflarında kullanmaktır. Örnek: Form1 de tanımlanan public değişkeni göster butonuna tıklandığında Form2 de gösteren kodları yazınız? public static string baslik; baslik = "TEFENNİ MYO"; Form2 yeni_form = new Form2(); yeni_form.show(); this.hide(); // formu gizler. private void Form2_Load(object sender, EventArgs e) label1.text = Form1.baslik; Form1 eski_form = new Form1(); eski_form.show(); this.close(); // formu kapatır.
İf else Yapısı: Ard arda şartların olduğu durumlarda kullanılır. Örnek: Yazılı1, yazılı2 ve sözlü notları girilip, ortalamayı label da gösteren, bu ortalamaya göre (0-24 >0, 25-44 >1, 45-54 >2, 55-69 >3, 70-84 >4, 85-100 >5) öğrencinin notunu diğer label da gösteren programı yazınız? int yazili1, yazili2, sozlu, ort; yazili1 = Convert.ToInt32(textBox1.Text); yazili2 = Convert.ToInt32(textBox2.Text); sozlu = Convert.ToInt32(textBox3.Text); ort = (yazili1 + yazili2 + sozlu) / 3; label1.text = ort.tostring(); if (ort < 25) label2.text = "0"; else if (ort < 45) label2.text = "1"; else if (ort < 55) label2.text = "2"; else if (ort < 70) label2.text = "3"; else if (ort < 85) label2.text = "4"; else label2.text = "5"; Ödev: klavyeden girilen vize ve final notuna göre ortalamayı label da yazdıran, ortalamaya göre harf notunu başka label da, 70 in altındaysa kırmızı renkte, 70 ve üstündeyse yeşil renkte gösteren programı yazınız? label2.forecolor = Color.Green; else if (ort > 84) label2.text = "BA"; label2.forecolor = Color.Green; else if (ort > 79) label2.text = "BB"; label2.forecolor = Color.Green; else if (ort > 74) label2.text = "CB"; label2.forecolor = Color.Green; else if (ort > 69) label2.text = "CC"; label2.forecolor = Color.Green; else if (ort > 64) label2.text = "DC"; label2.forecolor = Color.Red; else if (ort > 59) label2.text = "DD"; label2.forecolor = Color.Red; else label2.text = "FD"; label2.forecolor = Color.Red; int vize,final, ort; vize = Convert.ToInt32(textBox1.Text); final = Convert.ToInt32(textBox2.Text); ort = vize*40/100+final*60/100; label1.text = ort.tostring(); if (ort > 89) label2.text = "AA";
RANDOM SINIFI: Rastgele sayı üretileceği durumlarda kullanılır. Belirtilen aralıklarda rastgele bir sayı üretir. Kullanımı: Random deneme=new Random(); int sayi=deneme.next(100); // 0-100 arasında rastgele bir sayı üretir ve sayi değişkenine atar. Örnek: Random sayisal=new Random(); int sayi2=sayisal.next(1,50); // 1 dahil, 50 dahil değil arasında bir sayı üretir. Örnek: Klavyeden girilen ilk ve son değer arasında rastgele bir sayı üretip label da gösteren programı yazınız? int ilk, son; ilk = Convert.ToInt32(textBox1.Text); son = Convert.ToInt32(textBox2.Text); Random sayisal = new Random(); int uretilen = sayisal.next(ilk, son); label1.text = uretilen.tostring(); Ödev: Bir bankanın kredi kartı müşterileri için ilk şifre gönderimi yapılacaktır. 1000-9999 arasında rastgele bir şifre üretilecek ve label da gösteren programı yazınız? Ödev: Sayısal loto programı yapılacaktır. 1-49 arasında 6 tane sayı üretilecek ve ayrı ayrı label larda gösterilecektir. FOR DÖNGÜSÜ: Belirli sayıda kodlar tekrar tekrar çalıştırılacaksa for döngüsü kullanılır. Örneğin, başlangıç ve bitiş aralığı belirtilip bu aralıktaki sayı kadar kodları çalıştırmak için kullanılır. Kullanımı: for (int i=başlangıç değeri; i<bitiş değeri; artış miktarı) döngü sağlandığı sürece tekrar tekrar çalıştırılacak kodlar; Örnek: 1 den 100 e kadar olan sayıların toplamını label da gösteren programı yazınız? int toplam = 0; for (int i = 1; i <= 100; i++) toplam = toplam + i; label2.text = toplam.tostring();
Örnek: 1 ile 100 arasındaki tek sayıların toplamını label2 de, çift sayıların toplamını label4 te gösteren programı yazınız? int tektoplam=0, cifttoplam=0; for (int i = 1; i <= 100; i += 2) tektoplam = tektoplam + i; label2.text = tektoplam.tostring(); for (int j = 2; j <= 100; j += 2) cifttoplam = cifttoplam + j; label4.text = cifttoplam.tostring(); 2.yol: int tektoplam=0, cifttoplam=0; for (int i = 1, j = 2 ; i <= 100 && j <= 100 ; i += 2, j += 2) tektoplam +=i; // tektoplam = tektoplam + i; cifttoplam +=j; // cifttoplam = cifttoplam + j; label2.text=tektoplam.tostring(); label4.text=cifttoplam.tostring(); Örnek: Klavyeden girilen başlangıç ve bitiş değerleri arasındaki tüm sayıları toplayıp label da gösteren programı yazınız? int ilk=0, son=0,toplam=0; ilk = Convert.ToInt32(textBox1.Text); son = Convert.ToInt32(textBox2.Text); for (int i = ilk; i <= son; i++) toplam += i; label2.text = toplam.tostring(); Ödev: TextBox1 e girilen metni, TextBox2 ye girilen sayı kadar, ListBox1 e ekleyen programı yazınız? WHİLE DÖNGÜSÜ: Verilen Şarta Bağlı Olarak Kod Bloklarının Bir Döngü Halinde Tekrar Tekrar Çalıştırılmasını Sağlar. Kullanımı: while (şart veya şartlar) kodlar; ÖRN: 0-25 arasında üretilen rastgele sayılardan 8 sayısını kaçıncı defada üretildiğini label1 de gösteren programı yazalım? int sayac; Random r = new Random(); int rsayi = 0; sayac = 0; while (rsayi!= 8) rsayi = r.next(0, 26); sayac++;
label1.text = "8 sayısı "+ sayac+". denemede bulundu.".tostring(); Ödev: 0-25 arasında rastgele sayı üretilecek, kullanıcı textbox ta sayıyı tahmin edecek. Eğer üretilen sayı tahmin edilen sayı ile aynı ise label a doğru yazacak, üretilen sayı tahmin edilen sayıdan küçükse büyük değer girdiniz, üretilen sayı tahmin edilenden büyükse label a küçük değer girdiniz yazacak. Ayrıca her tahmin edilen sayıyı listbox a ekleyecektir. int uretilen; private void Form1_Load(object sender, EventArgs e) Random rsayi = new Random(); uretilen = rsayi.next(0, 26); label3.text = uretilen.tostring(); int sayi = Convert.ToInt32(textBox1.Text); label1.text = "Doğru tahmin... Bravooo..."; while (sayi!= uretilen) listbox1.items.add(sayi); if (sayi > uretilen) label1.text = "Büyük sayı girdiniz"; else if (sayi < uretilen) label1.text = "Küçük sayı girdiniz"; break; TRY CATCH YAPISI Hazırlanan programda kullanıcıların girmiş olduğu yanlış verilerden dolayı oluşan hataları bulur. Hata yoksa TRY2dan sonraki, Hata varsa CATCH ten sonraki kodlar çalışır. Kullanımı: try deger = listbox1.items.indexof(textbox2.text); label3.text = listbox1.items[deger].tostring(); catch (Exception hata) MessageBox.Show("Sorun" + hata.message); //Catch ten sonra messagebox ile oluşan hatanın kodu gösterildi. TOOLBOX NESNELERİ VE ÖZELLİKLERİ 1- TEXTBOX: Klavyeden girilen değerlerde kullanılır. a- Clear Özelliği: textbox ı temizler. Textbox1.Clear(); b- Backcolor Özelliği: TextBox ın arkaplan rengini değiştirmek için kullanılır. textbox1.backcolor=color.red;
c- Enabled Özelliği: Aktif veya Pasif yapar.(true/false) textbox1.enabled=false; //textbox1 i pasif yapar. d- Visible Özelliği: Görünür/görünmez yapar. (True/False) Textbox1.visible=false; // Textbox1 i görünmez yapar. e- ForeColor Özelliği: yazı rengi ile ilgili. Textbox1.ForeColor=Color.Yellow; f- MaxLength Özelliği: En Çok kaç karakter girilebileceğini ayarlar. TextBox1.MaxLength=11; //En fazla 11 karakter girilebilir. g- PasswordChar Özelliği: TextBox a girilen değerleri belli bir karakterde yazılmasını sağlar. Genellikle şifre girişleri için kullanılır. Textbox1.PasswordChar=(char)42; // 42 yıldız simgesinin ascii kodudur. 64 @ kodudur. h- MultiLine Özelliği: Yazım işlerini birden fazla satırda yapmak için kullanılır. i- Undo Özelliği: Yapılan işlemi bir geri alır. Ctrl + Z tuşlarını aktif eder. Textbox1.Undo(); 2- LİSTBOX a- Items.Add Özelliği: ListBox a eleman eklemek için kullanılır. listbox1.items.add(textbox1.text) //textbox1 deki veriyi listbox1 e ekler. b- Items Özelliği: ListBox ın eleman içeriğini öğrenmek için kullanılır. Label1.Text=ListBox1.Items[1].ToString(); //listbox daki 2. Sıradaki değeri label a yazar. c- Items.Clear Özelliği: ListBox ı temizlemek için kullanılır. Listbox1.Items.Clear(); d- Items.Count Özelliği: ListBox daki eleman sayısını verir. Label1.text=listbox1.items.count.ToString(); //listbox daki eleman sayısını stringe çevirip labelda gösterir. e- Items.IndexOf Özelliği: listbox ta eleman aramak için kullanılır. Eğer aranan eleman var ise sıra numarasını yok ise -1 değeri döndürür. Label2.text= listbox1.items.indexof(textbox1.text).tostring(); // TextBox1 e girilen değer listbox1 de varsa sıra numarasını, yoksa -1 değerini label2 ye yazar. Not: Elemanların sıra numarası 0(sıfır) dan başlar. İpucu: Mesela ekrana eleman sayısını yazdırmak istiyorsak, bunun için eleman sayısına +1 ekleyerek bulabiliriz. f- Items.Contains Özelliği: ListBox ta eleman aramak için kullanılır.eğer aranan eleman var ise TRUE, Yok ise FALSE değeri döndürür. Label2.text= listbox1.items.contains(textbox1.text).tostring(); g- FindString Özelliği: Arama yapmak için kullanılır. Eğer belirtilen metnin karakter sıraları ListBox daki herhangi bir elemanın karakter sıraları ile eşleşiyorsa sıra numarasını, eşleşmiyorsa -1 değeri döndürür. Ödev: TextBox1 a girilen değerleri Ekle butonuna tıklandıkça ListBox a ekleyen. TextBox2 ye yazılan aranacak değerin listboxt ta olup/olmadığına bakarak, eğer varsa değeri label1 de gösteren, yoksa yine label1 e aranan değer bulunamadı yazan programı yazınız? listbox1.items.add(textbox1.text); int deger; private void button2_click(object sender, EventArgs e) deger = listbox1.items.indexof(textbox2.text); if (deger >= 0) label3.text = listbox1.items[deger].tostring();
else label3.text = "aranan değer bulunamadı..."; Örnek: Textbox1 e girilen metni, textbox2 ye girilen sayı kadar listbox a ekleyen programı yazınız? textbox1.text); int sayac = 0; string metin = textbox1.text; int defa = Convert.ToInt32(textBox2.Text); listbox1.items.clear(); for (int i = 0; i < defa; i++) sayac++; listbox1.items.add(+sayac +" - "+ 3- Button Özellikleri: Text, Visible, Enabled, Forecolor, Backcolor özellikleri vardır. a) AcceptButton Özelliği: Aktif formda enter tuşuna basıldığı zaman hangi butonun çalışacağını belirlemek için kullanılır. kullanımı: AcceptButton=button1; b) CancelButton Özelliği: Aktif formda ESC tuşuna basıldığında hangi butonun çalışacağını belirlemek için kullanılır. 4- Label Özellikleri: Text, Visible, Enabled, Forecolor, Backcolor özellikleri vardır. 5- radiobutton Özellikleri: a) Text Özelliği: radiobutton un içindeki metinle ilgili işlemler için kullanılır. Örnek: label1.text=radiobutton1.text; b) backcolor Özelliği: radiobutton un arkaplan rengi ile ilgili işlemler için kullanılır. c) Forecolor özelliği: d) Visible özelliği: e) Enabled özelliği: f) Checked özelliği: radiobutton unu seçili olup/olmadığı durumlar için kullanılır. True ise seçili, False ise seçili değildir. g) CheckedChanged Özelliği: RadioButton seçildiğinde işlem yaptırılacaksa kullanılır. Bu özellik radiobutton un üzerine çift tıklanarak yapılır. Örneğin; radiobutton2 seçiliyken groupbox2 yi pasif yapmak için; private void radiobutton2_checkedchanged(object sender, EventArgs e) if (radiobutton2.checked == true) groupbox2.enabled = false; Örnek: aşağıdaki form tasarımında hangi seçenek seçiliyse butona tıklandığında, seçili olan şıktaki yazıyı label1 de doğru ise yeşil renkte, yanlış ise kırmızı renkte gösteren, ayrıca sorunun doğru cevabını da label5 de ve yeşil renkte yazan program?
6- GroupBox Özelliği: Nesneleri gruplamak için kullanılır. 3 sebep için kullanılır. 1. Sebep: Formda birden fazla radiobutton grubu varsa ve iki ayrı gruptan birer tane seçilecekse. 2. Sebep: Birden fazla nesneye aynı anda işlem yapmak için kullanılır. 3. Sebep: Formun daha düzenli olması için kullanılır. Örn: Her bir groupbox tan bir seçeneğin seçilmesi işlemi. Grupta yer alacak radiobutton lar groupbox içine dahil edilir. a- Text, Forecolor, backcolor, Enabled, Visible özellikleri daha önceki nesne özellikleriyle aynıdır. 7- notifyicon Özelliği: İşletim sistemi görev çubuğu sağ alt köşeye (saatin yanına) simge eklemek için kullanılır. a) Text: Simge üzerine gelindiğinde gösterilecek yazı. b) Icon: Simge olarak iconun gösterileceği belirlenir. c) Visible: 8- ContextMenuStrip Özelliği: Hazırlanan simgenin sağ tık menüsünün belirleneceği bölümdür. Not: this.hide(); o anki formu gizler. this.show(); gizlenen formu gösterir. 9- TİMER Özellikleri: İstenilen komutları belirlediğimiz zaman aralığında tekrar tekrar çalıştırılması istendiği durumlarda kullanılır. a- İnterval özelliği: Timer ın çalışacağı zaman bölümüdür. Zaman mili saniye cinsinden yazılır. Mesela 1 saniyede bir kodlar çalışacaksa, interval 1000 olmalıdır. b- Enabled özelliği: True ise timer ın tick olayına yazılan kodlar çalışır, false ise tick olayına yazılan kodlar çalışmaz. Yani timer ın çalışıp/çalışmama durumunu ayarlar. c- Tick olayı: Bu olaya yazılan kodlar interval ile belirlenen zamanda tekrar tekrar çalıştırılır. Örnek: başla butonuna tıklandığında labelda süreyi gösteren, dur butonuna tıklandığında süreyi durduran programı yazalım. timer1.enabled = true; sayac = 0; private void Form1_Load(object sender, EventArgs e)
timer1.interval = 1000; int sayac = 0; private void timer1_tick(object sender, EventArgs e) sayac++; label1.text = sayac.tostring(); private void button2_click(object sender, EventArgs e) Örnek: Başla butonuna tıklandığında her 1 saniyede adınızı listbox a ekleyen, dur butonuna tıklandığında eklemyi sonlandırıp, listbox daki eleman sayısını label da gösteren ve listbox ı temizleyen programı yazınız? timer1.enabled = true; private void Form1_Load(object sender, EventArgs e) timer1.interval = 1000; private void timer1_tick(object sender, EventArgs e) listbox1.items.add("tefenni MYO"); private void button2_click(object sender, EventArgs e) label1.text = listbox1.items.count.tostring(); listbox1.items.clear(); Uygulama: Textbox1 e girilen değeri, ekle butonuna tıklandığında her yarım saniyede bir listbox a başında sıra numarası ile ekleyen, dur butonuna tıklandığında ekleme işlemini durduran. timer1.enabled = true; //sayac = 0; private void Form1_Load(object sender, EventArgs e) timer1.interval = 500; int sayac = 0; private void timer1_tick(object sender, EventArgs e) sayac++; listbox1.items.add(+sayac+" - " +textbox1.text); private void button2_click(object sender, EventArgs e)
Örnek: Kronometre programı? e) timer1.interval = 1; int salise = 0; int saniye = 0; int dakika = 0; private void timer1_tick(object sender, EventArgs e) timer1.enabled = true; listbox1.items.clear(); sayac = 0; private void Form1_Load(object sender, EventArgs label4.text = salise.tostring(); salise++; if (salise > 99) saniye++; label3.text = saniye.tostring(); salise = 0; if (saniye > 58) dakika++; label2.text = dakika.tostring(); saniye = 0; private void button2_click(object sender, EventArgs e) sayac++; listbox1.items.add(+sayac + "-" + label2.text + ":" + label3.text + ":" + label4.text); int sayac = 0; private void ara_zaman_click(object sender, EventArgs e) sayac++; listbox1.items.add(+sayac + "-" + label2.text + ":" + label3.text + ":" + label4.text);