pbs.bozok.edu.tr · web viewc#’ta bir metot tanımlandığı sınıfın dışında başka bir...
TRANSCRIPT
GÖRSEL PROGRAMLAMA 1 DERS NOTLARI
Hazırlayan: Öğr. Gör. Fahri YILMAZ
Ocak, 2017
İÇİNDEKİLER
GÖRSEL PROGRAMLAMA 1....................................................................................................................4
1. FORMLAR VE KONTROLLER................................................................................................................4
1.1 FORMLAR......................................................................................................................................4
1.1.1 FORMLAR ARASI GEÇİŞ..........................................................................................................5
1.1.2 FORM NESNESİNİN ÖZELLİKLERİ............................................................................................6
1.1.3 FORM NESNESİNİN OLAYLARI................................................................................................6
1.2 TEXTBOX KONTROLÜ....................................................................................................................8
1.2.1 TEXTBOX KONTROLÜNÜN ÖZELLİKLERİ.................................................................................8
1.2.2 TEXTBOX KONTROLÜNÜN METODLARI.................................................................................8
1.3 CHECKBOX KONTROLÜ...............................................................................................................11
1.3.1 CheckBox Kontrolünün Özellikleri........................................................................................11
1.4 Radio Button...............................................................................................................................14
1.5 Timer Kontrolü...........................................................................................................................15
1.6 PictureBox Kontrolü....................................................................................................................17
1.7 Combobox kontrolü....................................................................................................................20
2. METOTLAR........................................................................................................................................21
2.1 Metotların Tanımlanması...........................................................................................................21
2.2 METOD TÜRLERİ.........................................................................................................................22
2.3.1 Değer Döndürmeyen Metotlar............................................................................................22
2.3.2 Değer Döndüren Metotlar...................................................................................................22
2.3.3 Metotların Aşırı Yüklenmesi.................................................................................................22
2.4 Metotlarla İlgili Önemli Özellikler...............................................................................................23
2.5 Değişken Sayıda Parametre Alan Metotlar.................................................................................23
2.5.1 Değişken Sayıda Parametre Alan Metotlar..........................................................................24
2.6 Kendini çağıran (Recursive ) Metotlar.........................................................................................25
3. Karışık Uygulamalar..........................................................................................................................27
Uygulama Listesi
Uygulama 1: Formlar arası geçişlerin kullanılması..................................................................................5Uygulama 2 Form nesnesinin olayları.....................................................................................................7Uygulama 3 Textbox kontrolüne ait metotların kullanımı......................................................................8Uygulama 4 TextBox kullanarak hesap makinası yapma......................................................................10Uygulama 5 CheckBox kontrolünün seçilip seçilmediğini kontrol etme...............................................11Uygulama 6 CheckBox kontrolünün olaylarını kullanma......................................................................11Uygulama 7 CheckListBox Kontrolünün Kullanımı................................................................................13Uygulama 8 RadioButton Kontrolünün Kullanımı.................................................................................14Uygulama 9 Timer kontrolü ile kronometre yapımı..............................................................................16Uygulama 10 Timer kullanarak nesneleri hareket ettirme...................................................................17Uygulama 11 PictureBox ile resim geçişi yapma...................................................................................18Uygulama 12 PictureBox Uygulaması...................................................................................................19Uygulama 13 Combobox Kullanımı.......................................................................................................21Uygulama 14 Metot kullanarak 4 işlem yapma....................................................................................26Uygulama 15 Metot Uygulaması..........................................................................................................27Uygulama 16 Bilgisayar toplama..........................................................................................................28Uygulama 17 Kontrolleri bir arada kullanarak kuvvet ve faktöriyel hesaplama....................................29Uygulama 18 Kontrollerin bir arada kullanılması..................................................................................30Uygulama 19 Öğrenci numarası üretme...............................................................................................31Uygulama 20 Form elemanlarının kullanımı.........................................................................................32Uygulama 21 Dizi elemanlarını sağa sola kaydırma..............................................................................32Uygulama 22 Mayın tarlası oyunu........................................................................................................33Uygulama 23 Sürükle bırak uygulaması................................................................................................36Uygulama 24 Sürükle bırak ile puzzle yapma.......................................................................................37Uygulama 25 Tick Tack Tao Oyunu.......................................................................................................39Uygulama 26 Kaydırarak resim yapma oyunu......................................................................................41
GÖRSEL PROGRAMLAMA 1
1. FORMLAR VE KONTROLLER
Bütün Kontrollerde Aynı Olan Özellikler
Name : Nesnenin kodlama aşamasında kullanılacak ismidir.
Text : Nesnenin kullanıcı tarafından gösterilecek olan ismidir.
BackColor : Zemin rengini belirler.
ForeColor : Yazı rengini belirler.
Enabled : Nesnenin aktif ya da pasif olacağını belirler.
Font : Yazı tipi özelliklerini belirler.
Visible : Nesneyi görünür ya da görünmez yapar.
Location : Nesnenin konumunu belirler.
Size : Nesnenin boyutunu belirler.
1.1 FORMLAR
Windows uygulamalarında nesneler form üzerine yerleştirilerek kullanılırlar. Bir uygulamada birden fazla form kullanmak mümkündür. Formlar sisteme cs uzantılı olarak kaydedilirler. Form uygulamaları SDI (Single Document Interface) ve MDI (Multiple Document Interface) olarak iki ana biçimde gerçekleştirilebilir.
SDI Formlar : İçerisinde bir adet form penceresi bulunan uygulamalardır.
MDI Formlar : İçerisinde birden fazla form penceresi kullanabilen uygulamalardır.
Standart bir formun kod yapısı
İpucu : Form görsel arayüzünü kullanırken kod ekranına geçmek için F7, tekrar görsel ara yüze dönmek için Shift + F7 kuşları kullanılır.
1.1.1 FORMLAR ARASI GEÇİŞProjemize yeni bir form eklemek için Solution Explorer‘a farenin sağ tuşuyla tıklanarak Add / Windows Formya da Project menüsünden Add / Windows Formseçeneği ile yeni bir form eklenebilir.
Formlar arası geçişte kullanılan metodlar
Metod ÖzellikShow Bir formun görünür hale gelmesi için kullanılır.Hide Bir formu gizlemek için kullanılır.Visible Bir formun görünürlüğünü değiştirmek için kullanılır.Show Dialog Formu diyalog penceresi olarak açmak için kullanılır. Bu metod kullanıldığında
alttaki forma ulaşılamaz.Dispose Formla ilgili hafızadaki bilgileri silmek için kullanılır.Close Formu tamamen kapatmak için kullanılır. Ana formda bu metod kullanıldığında
tüm uygulama kapanmış olur.
Uygulama 1: Formlar arası geçişlerin kullanılması
Uygulama Adımları
1. Projenize 2 adet form ekleyin. 2. Her bir forma 1 adet buton ekleyin.3. Birinci formdaki butonun Text özelliğini “Sonraki Form”, name özelliğini “btnSonrakiForm” olarak değiştirin.4. İkinci formdaki butonun Text özelliğini “Önceki Form”, name özelliğini “btnOncekiForm” olarak değiştirin.
5. Yukarıdaki metodları kullanarak uygulamanızı gerçekleştirin.
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}
privatevoid btnSonrakiForm_Click(object sender, EventArgs e){Form2 frm2 = newForm2(); frm2.Show();}}
publicpartialclassForm2 : Form
{public Form2(){ InitializeComponent();}
privatevoid btnOncekiForm_Click(object sender, EventArgs e){Form1 frm1 = newForm1(); frm1.Show();this.Close();}}
1.1.2 FORM NESNESİNİN ÖZELLİKLERİÖZELLİK GÖREVİAcceptButton Form üzerinde Enter tuşuna basıldığında çalıştırılacak olan butonu belirler.CancelButton Form üzerinde Esc tuşuna basıldığı zaman çalıştırılacak olan butonu belirler.VindowState Formun hangi boyutlarda ekrana geleceğini belirler. Üç adet seçeneği vardır,
Normal : Formu hangi boyutlarda ayarladıysak o boyutlarda gelmesini sağlarMinimized : Formun simge durumuna küçültülmüş olarak ekrana gelmesi sağlarMaximized : Formun tam ekran boyutunda ekrana gelmesini sağlar
FormBorderStyle Formun biçimi ile birlikte boyutunun değiştirilebilip değiştirilemeyeceğini ayarlarNone : Form üst köşesindeki tüm kontrolleri ve formun kenar çizgilerini siler.Fixed Single : Formun boyutunun değiştirilmesini engellerFixed3D : Forma 3 boyutlu görünüm vererek aynı zamanda boyutlarının değiştirilmesini engellerFixedDialog : Formun boyutları değiştirilemez ve aynı zamanda form simgesi görünmez.Sizable : Varsayılan görüntüleme ayarıdır.FixedToolWindow : Yalnızca kapatma butonu aktifdir. Formun boyutları değiştirilemezSizableToolWindow : FixedToolWindowdanfarklı olarak formun boyutları değiştirilebilinir.
1.1.3 FORM NESNESİNİN OLAYLARIOLAY GÖREVİBindingContextChanged
Bu olayla birlikte form görünür hale gelmeye başlar
Load Formun yüklenmesi olayıdırActivated Form aktifleştiğinde gerçekleşen olaydırVisibleChanged Form görüntülendiğinde gerçekleşen olaydırShown Formun görüntülenmesi bittiğinde gerçekleşen olaydırPaint Form ve form üzerindeki kontroller ekrana çizilip yerleştiğinde gerçekleşen
olaydırFormClosing Form kapatılırken gerçekleşen olaydırFormClosed Form kapatıldığında gerçekleşen olayDeactivate Form artık aktif olmadığında gerçekleşen olaydırKeyDown Form üzerinde herhangi bir tuşa basıldığında gerçekleşen olay
Uygulama 2 Form nesnesinin olayları
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}privatevoid Form1_Load(object sender, EventArgs e){MessageBox.Show("Load Olayı");}privatevoid Form1_BindingContextChanged(object sender, EventArgs e){MessageBox.Show("BindingContextChanged Olayı");}privatevoid Form1_Activated(object sender, EventArgs e){// MessageBox.Show("Activated Olayı");}privatevoid Form1_VisibleChanged(object sender, EventArgs e){MessageBox.Show("VisibleChanged Olayı");}privatevoid Form1_Shown(object sender, EventArgs e){MessageBox.Show("Shown Olayı");}privatevoid Form1_Paint(object sender, PaintEventArgs e){//MessageBox.Show("Paint Olayı");}privatevoid Form1_FormClosing(object sender, FormClosingEventArgs e){MessageBox.Show("Form Closing Olayı");}privatevoid Form1_FormClosed(object sender, FormClosedEventArgs e){MessageBox.Show("Form Closed");}}
1.2 TEXTBOX KONTROLÜİçeriği değiştirilebilecek bilgilerin görüntülenmesi için kullanılır. Bilgi girişi amacı ile kullanılabilinir.
1.2.1 TEXTBOX KONTROLÜNÜN ÖZELLİKLERİÖzellik GörevMultiline Bir satırdan daha fazla bilgiyi görüntülemek için kullanılır. Kullanmak için multiline
özelliği true yapılır.ScrollBars Textbox nesnesi multiline özelliğindeyken kaydırma çubuklarının görüntülenmesi
sağlanırNone : Kaydırma çubukları görüntülenmezVertical: Dikey kaydırma çubuğu eklenirHorizontal : Yatay kaydırma çubuğu eklenirBoth : Hem yatay hem dikey kaydırma çubuğu eklenir
PasswordChar
Textbox içerisine girilen bilgilerin şifrelenerek başkalarının görüntülemesini engellemek için kullanılır.
ReadOnly False olduğunda textbox içerisindeki bilgiler değiştirilemezFont Yazı tipini değiştirmek için kullanılırForeColor Yazı rengini değiştirmek için kullanılırBackColor Arka plan rengini değiştirmek için kullanılırText TextBox içerisine girilen değerler saklanır
1.2.2 TEXTBOX KONTROLÜNÜN METODLARIMetod GörevCut Seçili olan metni keserek taşınmak üzere hafızaya alıCopy Seçili olan metni kopyalanmak üzere hafızaya alırPaste Hafızada olan metni yapıştırırUndo Son yapılan işlemi geri alırClear TextBox içerisindeki yazıyı silmek için kullanılırDispose TextBox nesnesini silerAppendText
TextBox içerisinde mevcut olan yazı silinmeden yazı eklemek için kullanılır.Kullanımı : textBox.AppentText(“Eklenecek metin”)Bu metodun yerine textBox.Text= textBox.Text + “Eklenecek Metin ya datextBox.Text += “Eklenecek Metin”
Uygulama 3 Textbox kontrolüne ait metotların kullanımı
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}
privatevoid btnKes_Click(object sender, EventArgs e){if (txtYazi.SelectionLength> 0)txtYazi.Cut();elseMessageBox.Show("Seçili alan yok");}privatevoid btnKopyala_Click(object sender, EventArgs e){if (txtYazi.SelectionLength> 0)txtYazi.Copy();elseMessageBox.Show("Seçili alan yok");}privatevoid btnYapistir_Click(object sender, EventArgs e){txtYazi.Paste();}privatevoid btnGeri_Click(object sender, EventArgs e){txtYazi.Undo();}
privatevoid btnYaziTipi_Click(object sender, EventArgs e){if (fontDialog1.ShowDialog() == DialogResult.OK)txtYazi.Font = fontDialog1.Font;}privatevoid btnRenk_Click(object sender, EventArgs e){if (colorDialog1.ShowDialog() == DialogResult.OK)txtYazi.ForeColor = colorDialog1.Color;}privatevoid btnKalin_Click(object sender, EventArgs e){txtYazi.Font = newFont(Font, FontStyle.Bold);}privatevoid btnEgik_Click(object sender, EventArgs e){txtYazi.Font = newFont(Font, FontStyle.Italic);
}privatevoid btnCizgili_Click(object sender, EventArgs e){txtYazi.Font = newFont(Font, FontStyle.Underline);}}
Uygulama 4 TextBox kullanarak hesap makinası yapma
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}privatevoid button1_Click(object sender, EventArgs e){int s1 = Convert.ToInt32(textBox1.Text);int s2 = Convert.ToInt32(textBox2.Text);int sonuc = s1 + s2; textBox3.Text = sonuc.ToString();}privatevoid button2_Click(object sender, EventArgs e){int s1 = Convert.ToInt32(textBox1.Text);int s2 = Convert.ToInt32(textBox2.Text);int sonuc = s1 - s2; textBox3.Text = sonuc.ToString();}privatevoid button3_Click(object sender, EventArgs e){int s1 = Convert.ToInt32(textBox1.Text);int s2 = Convert.ToInt32(textBox2.Text);int sonuc = s1 * s2; textBox3.Text = sonuc.ToString();}privatevoid button4_Click(object sender, EventArgs e){int s1 = Convert.ToInt32(textBox1.Text);int s2 = Convert.ToInt32(textBox2.Text);int sonuc = s1 / s2; textBox3.Text = sonuc.ToString();}}
1.3 CHECKBOX KONTROLÜ
1.3.1 CheckBox Kontrolünün ÖzellikleriÖzellik GörevChecked Kontrolün seçili olup olmadığını gösterir. İşaretli olduğunda true değeri, işaretsiz
olduğunda false değeri alırCheckState Unchecked: İşaretsiz
Checked: İşaretliIndeterminate : Belirsiz
Uygulama 5 CheckBox kontrolünün seçilip seçilmediğini kontrol etme
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}privatevoid btnHesapla_Click(object sender, EventArgs e){double toplam = 0;if (cbDefter.Checked == true)toplam += 2;if (cbKalem.Checked)toplam += 1;if (cbSilgi.Checked)toplam += 0.5;
txtSonuc.Text = "Toplam Ücret " + toplam + " TL";}}
Uygulama 6 CheckBox kontrolünün olaylarını kullanma
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}privatevoid cbKalin_CheckedChanged(object sender, EventArgs e){txtYazi.Font = newFont(txtYazi.Font.Name, txtYazi.Font.Size,txtYazi.Font.Style ^ FontStyle.Bold);}privatevoid cbItalik_CheckedChanged(object sender, EventArgs e){txtYazi.Font = newFont(txtYazi.Font.Name, txtYazi.Font.Size,txtYazi.Font.Style ^ FontStyle.Italic);}privatevoid cbCizgili_CheckedChanged(object sender, EventArgs e){txtYazi.Font = newFont(txtYazi.Font.Name, txtYazi.Font.Size,txtYazi.Font.Style ^ FontStyle.Underline);}}
1.3.2 CheckedListBox Kontrolünün ÖzellikleriÖzellik GörevItems İçerisindeki tüm elemanları temsil eder.CheckedItems ChecedListBox içerisindeki işaretlenmiş tüm elemanları temsil eder
1.3.2 CheckedListBox Kontrolünün MetodlarıItems özelliği aşağıdaki metodları içerir.
Özellik GörevAdd Belirtilen değeri listenin sonuna eklemek amacı ile kullanılırRemove Belirtilen değeri silmek amacı ile kullanılırRemoveAt Belirtilen index numaralı değeri silmek için kullanılırCount Eleman sayısını verirInsert Belirtilen değeri listenin istenilen bir yerine eklemek için kullanılırClear CheckedListbox içerisindeki elemanların hepsini silerContains Belirtilen eleman mevcutsa true sonucunu döndürür.CopyTo Belirtilen elemanı bir dizi içerisine kopyalayarak aktarma yapmak amacı ile
kullanılırSetItemChecked
Liste içerisindeki bir elemanın işaretini değiştirmek için kullanılır
Uygulama 7 CheckListBox Kontrolünün Kullanımı
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}
privatevoid button1_Click(object sender, EventArgs e){//Listeye eleman eklemek için checkedListBox1.Items.Add(textBox1.Text);}privatevoid button2_Click(object sender, EventArgs e){//Belirtilen elemanı listeden kaldırmak için checkedListBox1.Items.Remove(textBox1.Text);}privatevoid button3_Click(object sender, EventArgs e){//index numarasına göre silme yaparint index = Convert.ToInt32(textBox2.Text); checkedListBox1.Items.RemoveAt(index);}
privatevoid button4_Click(object sender, EventArgs e){//Eleman sayısıMessageBox.Show(checkedListBox1.Items.Count.ToString());}privatevoid button5_Click(object sender, EventArgs e){//Belirtilen konuma eleman eklemeint index = Convert.ToInt32(textBox2.Text); checkedListBox1.Items.Insert(index, textBox1.Text);}privatevoid button6_Click(object sender, EventArgs e){//Listedeki bütün elemanları temizler
checkedListBox1.Items.Clear();}
privatevoid button7_Click(object sender, EventArgs e){//Aradığımız eleman var mı yok muif (checkedListBox1.Items.Contains(textBox1.Text))MessageBox.Show("var");elseMessageBox.Show("Yok");}privatevoid button8_Click(object sender, EventArgs e){//belirli bir elemanı seçili hale getirmek içinint index = Convert.ToInt32(textBox2.Text);if (checkedListBox1.GetItemChecked(index))//belirtilen eleman seçili mi? checkedListBox1.SetItemChecked(index, false);else checkedListBox1.SetItemChecked(index, true);}privatevoid button9_Click(object sender, EventArgs e){for (int i = 0; i < checkedListBox1.Items.Count; i++){ checkedListBox1.SetItemChecked(i, true);}}}
1.4 Radio ButtonUygulama 8 RadioButton Kontrolünün Kullanımı
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}privatevoid rbKadin_CheckedChanged(object sender, EventArgs e){if(rbKadin.Checked==true){gbAskerlik.Enabled = false;rbMuaf.Checked = true;}elseif(rbErkek.Checked==true){gbAskerlik.Enabled = true;}}privatevoid btnKaydet_Click(object sender, EventArgs e){string mesaj = txtAd.Text + " " + txtSoyad.Text + " - Cinsiyet: ";if (rbErkek.Checked)mesaj += "Erkek - ";elsemesaj += "Kadın - ";
mesaj+="Askerlik: ";if (rbMuaf.Checked)mesaj += "Muaf";
elseif (rbYapildi.Checked)mesaj += "Yapıldı";elsemesaj += "Tecilli";
listBox1.Items.Add(mesaj);}}
1.5 Timer Kontrolü
Interval: Mili saniye cinsinden süreyi belirtir. 1000 ms = 1 sn
Olay
Tick : İçerisine yazılan komutları belirtilen sürede çalıştırılmasını sağlar
Metod
Start, Stop
Uygulama 9 Timer kontrolü ile kronometre yapımı
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}privatevoid btnBaslat_Click(object sender, EventArgs e){ timer1.Start(); saat = DateTime.Now.Hour;//saat dakika = DateTime.Now.Minute;//dakika saniye = DateTime.Now.Second;//saniye}privatevoid btnDurdur_Click(object sender, EventArgs e){ timer1.Stop();}int saat = 0, dakika = 0, saniye = 0;privatevoid timer1_Tick(object sender, EventArgs e)
{
saniye++;if (saniye == 60){saniye = 0; dakika++;}if (dakika == 60){dakika = 0; saat++;}if (saat == 24)saat = 0;
lblSaat.Text = saat.ToString(); lblDakika.Text = dakika.ToString();lblSaniye.Text = saniye.ToString();}}
Uygulama 10 Timer kullanarak nesneleri hareket ettirme
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}string yon = "";
privatevoid timer1_Tick(object sender, EventArgs e){if (yon == "SAG"){if (btnNesne.Left>= (panel1.Width - btnNesne.Width)) timer1.Stop();elsebtnNesne.Left += 5;}elseif (yon == "SOL"){if (btnNesne.Left<= 0)
timer1.Stop();elsebtnNesne.Left -= 5;}elseif (yon == "YUKARI"){if (btnNesne.Top<= 0) timer1.Stop();elsebtnNesne.Top -= 5;}elseif (yon == "ASAGI"){if (btnNesne.Top>= (panel1.Height - btnNesne.Height)) timer1.Stop();elsebtnNesne.Top += 5;}
}privatevoid btnSol_MouseDown(object sender, MouseEventArgs e){yon = "SOL"; timer1.Start();}privatevoid btnYukari_MouseDown(object sender, MouseEventArgs e){yon = "YUKARI"; timer1.Start();}privatevoid btnAsagi_MouseDown(object sender, MouseEventArgs e){yon = "ASAGI"; timer1.Start();}privatevoid btnSag_MouseDown(object sender, MouseEventArgs e){yon = "SAG"; timer1.Start();}privatevoid btn_MouseUp(object sender, MouseEventArgs e){ timer1.Stop();}
}
1.6 PictureBox Kontrolü
Uygulama 11 PictureBox ile resim geçişi yapma
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}
Image[] resim = {global::PictureBox_Ornek1_.Properties.Resources.Koala,global::PictureBox_Ornek1_.Properties.Resources.Chrysanthemum,global::PictureBox_Ornek1_.Properties.Resources.Hydrangeas,global::PictureBox_Ornek1_.Properties.Resources.Desert,global::PictureBox_Ornek1_.Properties.Resources.Jellyfish,global::PictureBox_Ornek1_.Properties.Resources.Lighthouse,global::PictureBox_Ornek1_.Properties.Resources.Penguins,global::PictureBox_Ornek1_.Properties.Resources.Tulips};int index = -1;privatevoid button1_Click(object sender, EventArgs e){ index--; button2.Enabled = true;if (index >= 0 && index <resim.Length){ pictureBox1.Image = resim[index];}if (index == 0) button1.Enabled = false;}
privatevoid button2_Click(object sender, EventArgs e){ index++; button1.Enabled = true;if (index >= 0 && index <resim.Length){ pictureBox1.Image = resim[index];}if (index == resim.Length - 1) button2.Enabled = false;}
privatevoid timer1_Tick(object sender, EventArgs e){ index++; pictureBox1.Image = resim[index];if (index == resim.Length - 1) index =- 1;}}
Uygulama 12 PictureBox Uygulaması
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}Image[] resim = {global::PictureBox_1.Properties.Resources.Chrysanthemum,global::PictureBox_1.Properties.Resources.Desert,global::PictureBox_1.Properties.Resources.Hydrangeas,global::PictureBox_1.Properties.Resources.Lighthouse,global::PictureBox_1.Properties.Resources.Tulips};int index = 0;privatevoid btnSonraki_Click(object sender, EventArgs e){ index++;if (index >= resim.Length) index = 0;
pictureBox1.Image = resim[index];}
privatevoid btnOnceki_Click(object sender, EventArgs e){ index--;if (index < 0) index = resim.Length - 1; pictureBox1.Image = resim[index];}
privatevoid timer1_Tick(object sender, EventArgs e){ index++;if (index >= resim.Length) index = 0;
pictureBox1.Image = resim[index];}
privatevoid Form1_Load(object sender, EventArgs e){
timer1.Start();}
privatevoid btnRasgele_Click(object sender, EventArgs e){Random r = newRandom(); pictureBox2.Image = resim[r.Next(0, resim.Length)]; pictureBox3.Image = resim[r.Next(0, resim.Length)]; pictureBox4.Image = resim[r.Next(0, resim.Length)]; pictureBox5.Image = resim[r.Next(0, resim.Length)]; pictureBox6.Image = resim[r.Next(0, resim.Length)]; pictureBox7.Image = resim[r.Next(0, resim.Length)]; pictureBox8.Image = resim[r.Next(0, resim.Length)];}}
1.7 Combobox kontrolü
Uygulama 13 Combobox Kullanımı
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}
privatevoid comboBox1_SelectedIndexChanged(object sender, EventArgs e){if (comboBox1.Text == "Siyah")this.BackColor = Color.Black;elseif (comboBox1.Text == "Beyaz")this.BackColor = Color.White;elseif (comboBox1.Text == "Mavi")this.BackColor = Color.Blue;elseif (comboBox1.Text == "Kırmızı")this.BackColor = Color.Red;elseif (comboBox1.Text == "Sarı")this.BackColor = Color.Yellow;}
privatevoid cmbIl_SelectedIndexChanged(object sender, EventArgs e){cmbIlce.Items.Clear();if(cmbIl.SelectedIndex==0){
cmbIlce.Items.Add("Akdağmadeni");cmbIlce.Items.Add("Aydıncık");}elseif (cmbIl.SelectedIndex == 1){cmbIlce.Items.Add("Mamak");cmbIlce.Items.Add("Altındağ");}elseif(cmbIl.SelectedIndex==2){cmbIlce.Items.Add("Tuzla");cmbIlce.Items.Add("Beşiktaş");}}}
2. METOTLARProgramın herhangi bir yerinde kullanmak için belirli bir işi yerine getirmek amacıyla tasarlanmış alt programlara metotdenir. Temelde kullanım amacı birden fazla yazılan kodları tek bir kez yazdıktan sonra tekrar tekrar kullanmaktır. Metotlar aynı zamanda alt program veya fonksiyon olarak da isimlendirilir. Nesneye yönelik programlama dillerinde genellikle fonksiyonlar “metot” olarak isimlendirilirler.
Her çalışan C# programı bir ana fonksiyona (Main) sahiptir. Program çalışmaya bu fonksiyondan başlar. Tüm kodların bu fonksiyon içine yazılması çok uygun olmaz. Tüm programı main fonksiyonunun içerisine yazmak yerine metotlar kullanılır. Metotlar tek başlarına çalıştırılamazlar. Çalışmaları için ana metot içerisinden çağırılmaları gerekir.
Metodun iş yapması için kendisini çağıran metottan aldığı bilgilere parametre(argüman), kendisini çağıran fonksiyona döndürdüğü bilgiye ise geri dönüş değeri (return value)denir. C# ta bildirilen bütün metotlar bir sınıfın (Class) içerisinde yer almak zorundadır.
2.1 Metotların Tanımlanmasımetot tanımları şu şekilde yapılır.
[erişim belirteçleri]<dönüş değeri, void> metot ismi (parametre listesi)
{
metot gövdesi;
}
Erişim belirteçleri (public, private..) metoda nerelerden erişilebileceğini ayarlar.Belirtilmediği durumlarda “private” olarak kabul edilir. Yani sadece tanımlandığı sınıf içinde kullanılabilen bir metot olur. Geri dönüş değeri, metodun çağıran fonksiyona gönderdiği veririn türüdür. Parametreler ise metodun çalışırken ihtiyaç duyduğu çağıran fonksiyondan gönderilen bilgileridir.
int MetotAdi (int a, int b)
{
return (a+b)
}
C#’ta bir metot tanımlandığı sınıfın dışında başka bir sınıftan kullanılacaksa metodun içinde bulunduğu sınıf türünden bir nesne tanımlanır ve ‘.’ operatörü ile metot çağrılır. Static olarak tanımlanan metotlara erişmek için metodun içinde bulunduğu sınıf türünden bir nesne yaratmaya gerek yoktur. Static olarak tanımlanan metotlara sadece metodun adını yazarak erişilebilir.
2.2 METOD TÜRLERİMetotlar temelde aynı şekilde tanımlansa da, tanımlanma şekillerine göre 3'e ayrılır.
2.3.1 Değer Döndürmeyen MetotlarBu metotlarda return ifadesiyle geriye herhangi bir değer döndürülmez. metot çağrıldığında gövde kısmında yazılan programları çalıştırdıktan sonra tekrar çağrıldığı yere döner. Herhangi bir ek sonuç üretmez. Tanımlanma şekli şu şekildedir.
[erişim belirteçleri]void<metot ismi> (parametre listesi)
{
metot gövdesi;
}
2.3.2 Değer Döndüren MetotlarBu metotlar tanımlanırken bir dönüş türü belirtilir ve metodun sonunda başta belirtilen türde geriye bir değer döndürülmelidir. Tanımlanma şekli şu şekildedir.
[erişim belirteçleri]<dönüş türü><metot ismi> (parametre listesi)
{
metot gövdesi;
return <dönüş değeri>
}
Herhangi bir metot return ifadesiyle karşılaştığı andan itibaren geriye kalan kodları çalıştırmaz.
2.3.3 Metotların Aşırı YüklenmesiMetotların aşırı yüklenmesi tanımlanma biçimiyle ilgili değildir. Farklı türde veya farklı sayıda parametle belirleyerek aynı fonksiyonun birden fazla oluşturulmasına denir. Aynı isimli metotlardan hangisinin kullanılacağı, metodun çalıştırıldığı anda kullanılan parametre ile belirtilir. İlgili parametreler hangi fonksiyon ile eşleşiyorsa o fonksiyon çağrılarak işlem yapılır.
Metotların aşırı yüklenmiş sayılabilmesi için, tanımlanırken parametre listesine kadar olan kısımların aynı olması gerekir.
2.4 Metotlarla İlgili Önemli Özellikler1- Metotlar isimlendirilirken, değişken isimlendirmede uyulması gereken kurallara uyulmalıdır. Ayrıca Main() isimli ikinci bir metot daha tanımlanamaz.
2- Eğer bir metot geriye değer döndürmeyecekse “void” olarak tanımlanır. Eğer giriş parametresi yoksa parantez içi boş bırakılır.
3- Geri dönüş değeri olmayan metotlarda (void ile belirtilmiş) return anahtar sözcüğünün yanında herhangi bir ifade olmadan da kullanılabilir. Geri dönüş değeri olmayan metotlarda return anahtar sözcüğünü bir ifade ile kullanmak yasaktır.
4-“return” anahtar sözcüğü ile geri değer döndürürken de türlerin uyumlu olmasına dikkat edilmelidir.
5- Metotlara parametre gönderirken tür dönüşümü kurallarına uyulmalıdır, uygun türler kullanılmalıdır.
6- Metot çağırırken parametreler eksiksiz girilmelidir. Eksik parametreli metot çağrıları geçersizdir.
7- Metotlar parametre almadan da tanımlanabilir.
8-Bir metot içerisinde başka bir metot bildirilemez.
9- Metot parametre parantezindeki değişkenlerin türlerinin tek tek belirtilmesi gerekir. ‘,’ ile ortak tür bildirimi yapılamaz.
10- Metotlar içinde tanımlanan değişkenler programın başından sonuna kadar durmaz. Bu değişkenler, programın akışı metoda geldiğinde tanımlanır. Metodun işlevi bittiğinde ise bellekten silinirler. Programın akışı tekrar metoda geldiğinde değişkenler yeniden tanımlanır ve sonunda yine bellekten silinir. Bu tür değişkenlere otomatik ömürlü nesneler denir.
11- Bir metodun geri dönüş değerini aynı metot için parametre olarak kullanabiliriz.
2.5 Değişken Sayıda Parametre Alan MetotlarMetotlara gönderilebilecek parametre sayısı bilinmediği zamanlarda değişik sayıda parametre alan metotlar tanımlanabilir. Bu metotlar parametreleri dinamik bir dizi içinde depolayarak kullanılmasını sağlarlar.Değişken sayıda parametre alan metot tanımlamak için params anahtar sözcüğü kullanılır.
using System;
class paramsa {
static int Toplam(params int* + sayılar) {
if(sayılar.Length==0)
return 0;
int toplam=0;
foreach(int sayi in sayılar)
toplam+=sayi;
return toplam;
}
static void Main() {
Console.WriteLine(Toplam());
Console.WriteLine(Toplam(5));
Console.WriteLine(Toplam(5,10));
Console.WriteLine(Toplam(5,10,15));
Console.WriteLine(Toplam(5,10,15,30,50));
}
}
2.5.1 Değişken Sayıda Parametre Alan MetotlarMetodumuzda değişken parametre yanında bir ya da daha fazla normal sabit parametre de olabilir. Ancak değişken parametre mutlaka en sonda yazılmalıdır.
NOT: Değer döndüren metotlarımız mutlaka her durumda değer döndürmelidir. Örneğin metodumuzda sondaki else kullanılmazsa programımız derlenmez. Çünkü else'i kullanmasaydık birinci parametre yalnızca "carp" veya "topla" olduğunda metodumuz bir değer döndürecekti. Ve bu da C# kurallarına aykırı.
class Metotlar {
static int Islem(string a, params int[] sayilar)
{
if(a=="carp")
{ if(sayilar.Length==0) return 1;
int carpim=1;
foreach(int i in sayilar) carpim*=i;
return carpim;
}
else if(a=="topla")
{ if(sayilar.Length==0) return 0;
int toplam=0;
foreach(int i in sayilar) toplam+=i;
return toplam;
}
else return 0;
}
static void Main()
{
Console.WriteLine(Islem("topla",3,4,7,8));
Console.WriteLine(Islem("carp",5,23,6));
}
2.6 Kendini çağıran (Recursive ) MetotlarKendi kendini çağıran metotlara özyineli( recursive) metot denilir. Bu metotlarda, çağrımı sonlandıran bir kontrol yapısı da olmalıdır.
static int Faktoriyel(int a) {
if(a==0)
return 1;
return a*Faktoriyel(a-1); //fonksiyon kendi içerisinde çağrıldı
}
Uygulama 14 Metot kullanarak 4 işlem yapma
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}void IslemYap(string islemTuru){int s1 = Convert.ToInt32(txtSayi1.Text);int s2 = Convert.ToInt32(txtSayi2.Text);double sonuc = 0;if (islemTuru == "TOPLA") sonuc = s1 + s2;elseif (islemTuru == "CIKAR") sonuc = s1 - s2;elseif (islemTuru == "CARP") sonuc = s1 * s2;elseif (islemTuru == "BOL") sonuc = s1 / s2;
txtSonuc.Text = sonuc.ToString();}
privatevoid btnTopla_Click(object sender, EventArgs e){ IslemYap("TOPLA");}privatevoid btnCikar_Click(object sender, EventArgs e){ IslemYap("CIKAR");}privatevoid btnCarp_Click(object sender, EventArgs e){ IslemYap("CARP");}privatevoid btnBol_Click(object sender, EventArgs e){ IslemYap("BOL");}}
Uygulama 15 Metot Uygulaması
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}
void Aktar(string metin){string[] m = metin.Split(' '); listBox3.Items.Add(m[0]); listBox4.Items.Add(m[1]);}
privatevoid button1_Click(object sender, EventArgs e){ Aktar(listBox1.SelectedItem.ToString());}
privatevoid button2_Click(object sender, EventArgs e){ Aktar(listBox2.SelectedItem.ToString());}
}
3. Karışık Uygulamalar
Uygulama 16 Bilgisayar toplama
- Her gruptan seçilen özellik seçilenler listesine eklenece.- Seçilenler listesinin 1. sıransında işlemci olacak ve sırasıyla Ram, Hdd, Ekran Kartı yer alacak- Seçimlerden biri değiştiğinde seçilenler listesi de değişecek- En altta seçilen ürünlerin toplam fiyatları görünecek
Uygulama 17 Kontrolleri bir arada kullanarak kuvvet ve faktöriyel hesaplama
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}
privatevoid button1_Click(object sender, EventArgs e){if (string.IsNullOrEmpty(txtSayi1.Text) || string.IsNullOrEmpty(txtSayi2.Text))MessageBox.Show("Sayıların her ikisi de girilmiş olmalıdır");else{int s1 = 0, s2 = 0, sonuc = 1; s1 = Convert.ToInt32(txtSayi1.Text); s2 = Convert.ToInt32(txtSayi2.Text);for (int i = 0; i < s2; i++){ sonuc *= s1;}lblKuvvet.Text = "Sonuç = " + sonuc;}
}privatevoid button2_Click(object sender, EventArgs e){if (string.IsNullOrEmpty(txtSayi1.Text))MessageBox.Show("Sayı1 girilmiş olmalıdır");else{int s1 = 0, s2 = 0, sonuc = 1; s1 = Convert.ToInt32(txtSayi1.Text);
for (int i = 1; i <= s1; i++){ sonuc *= i;}lblFaktoriyel.Text = "Sonuç = " + sonuc;}}}
Uygulama 18 Kontrollerin bir arada kullanılması
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}
privatevoid btnAktar_Click(object sender, EventArgs e){string hata = "";if (string.IsNullOrEmpty(txtAd.Text))hata = "Ad alanı boş bırakılamaz\n";if (string.IsNullOrEmpty(txtKod.Text))hata += "Ders kodu boş bırakılamaz";
if (!string.IsNullOrEmpty(hata))MessageBox.Show(hata);else listBox1.Items.Add(txtAd.Text + " - " + txtKod.Text);}
privatevoid btnSil_Click(object sender, EventArgs e){if (listBox1.SelectedIndex > -1) listBox1.Items.RemoveAt(listBox1.SelectedIndex);elseMessageBox.Show("Seçili eleman yok");}privatevoid btnTemizle_Click(object sender, EventArgs e){ listBox1.Items.Clear();}}
Uygulama 19 Öğrenci numarası üretme
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}int f1 = 0, f2 = 0, f3 = 0;privatevoid btnYeni_Click(object sender, EventArgs e){string numara = "";if (cmbFakulte.Text == "Akdağmadeni MYO")numara = "01";elseif (cmbFakulte.Text == "Mühendislik Fakültesi")numara = "02";elseif (cmbFakulte.Text == "Fen - Edebiyat Fakültesi")numara = "03";else{MessageBox.Show("Bir Fakülte Seçin");return;} numara += (DateTime.Now.Year%100).ToString();
if (cmbFakulte.Text == "Akdağmadeni MYO"){ f1++; numara +=string.Format("{0:0000}", f1);
}elseif (cmbFakulte.Text == "Mühendislik Fakültesi")
{ f2++; numara += string.Format("{0:0000}", f2);}elseif (cmbFakulte.Text == "Fen - Edebiyat Fakültesi"){ f3++; numara += string.Format("{0:0000}", f3);}
txtNumara.Text = numara;}}
Uygulama 20 Form elemanlarının kullanımı
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}
privatevoid button1_Click(object sender, EventArgs e){for (int sayac1 = 0; sayac1 < 10; sayac1++){for (int sayac2 = 0; sayac2 < 10; sayac2++){for (int sayac3 = 0; sayac3 < 10; sayac3++){ label1.Text = sayac1.ToString(); label2.Text = sayac2.ToString(); label3.Text = sayac3.ToString(); listBox1.Items.Add(sayac1.ToString() + sayac2 + sayac3);
label1.Refresh(); label2.Refresh(); label3.Refresh(); listBox1.Refresh();
System.Threading.Thread.Sleep(100);}}}}}
Uygulama 21 Dizi elemanlarını sağa sola kaydırma
publicpartialclassForm1 : Form{public Form1(){
InitializeComponent();}
int[] dizi = { 1, 2, 3, 4, 5, 6, 7 };privatevoid Form1_Load(object sender, EventArgs e){ Yazdir();}privatevoid Yazdir(){ label1.Text = "";for (int i = 0; i <dizi.Length; i++){ label1.Text += dizi[i] + " - ";}}int tempDeger = 0;privatevoid btnSag_Click(object sender, EventArgs e){ tempDeger = dizi[dizi.Length - 1];for (int i = dizi.Length-1; i > 0;i--){dizi[i] = dizi[i-1];}dizi[0] = tempDeger; Yazdir();}
privatevoid btnSol_Click(object sender, EventArgs e){ tempDeger = dizi[0];for (int i = 0; i <dizi.Length-1; i++){dizi[i] = dizi[i + 1];} dizi[dizi.Length-1] = tempDeger; Yazdir();}}
Uygulama 22 Mayın tarlası oyunu
publicpartialclassForm1 : Form{
public Form1(){ InitializeComponent();}int satir = 0, sutun = 0, bombaSayisi = 0, tiklama = 0;int[] bombaYeri; int[,] oyunTablo;privatevoid btnYeni_Click(object sender, EventArgs e){ YeniOyunHazirla();}void YeniOyunHazirla(){ tiklama = 0; satir = Convert.ToInt32(txtSatir.Text); sutun = Convert.ToInt32(txtSutun.Text); bombaSayisi = Convert.ToInt32(txtBomba.Text);
panel1.Width = 25 * sutun + 2; panel1.Height = 25 * satir + 2;
ButonlariYerlestir(); BombaAta(); BombalariYerlestir();}void BombalariYerlestir(){ oyunTablo = newint[satir, sutun];for (int i = 0; i < satir; i++){for (int j = 0; j < sutun; j++){ oyunTablo[i, j] = 0;}}
for (int i = 0; i <bombaYeri.Length; i++){int tempX = bombaYeri[i] / sutun;int tempY = bombaYeri[i] % sutun;
oyunTablo[tempX, tempY] = 1;}}void BombaAta(){ bombaYeri = newint[bombaSayisi];
for (int i = 0; i <bombaYeri.Length; i++) bombaYeri[i] = -1;
Random r = newRandom();bool bulundu = false;for (int i = 0; i <bombaYeri.Length; i++){do{bulundu = false;int temp = r.Next(0, satir * sutun);for (int j = i; j <bombaYeri.Length; j++){if (bombaYeri[j] == temp){bulundu = true;
break;}} bombaYeri[i] = temp;}while (bulundu);}}void ButonlariYerlestir(){ panel1.Controls.Clear();
for (int i = 0; i < satir; i++){for (int j = 0; j < sutun; j++){Button b = newButton(); b.Location = newSystem.Drawing.Point(j * 25, i * 25);b.Name = "button-" + i + "-" + j; b.Size = newSystem.Drawing.Size(25, 25); b.Click += newSystem.EventHandler(btnBomba_Click);
panel1.Controls.Add(b);}}}privatevoid btnBomba_Click(object sender, EventArgs e){Button b = (Button)sender;int tempX = Convert.ToInt32(b.Name.Split('-')[1]);int tempY = Convert.ToInt32(b.Name.Split('-')[2]);b.Enabled = false;
if (oyunTablo[tempX, tempY] == 1){ EkraniSifirla();MessageBox.Show("Oyunu Kaybettin");}else{ tiklama++;b.Text = BombalariYazdir(tempX, tempY).ToString();}if (tiklama == (satir * sutun - bombaSayisi)){ EkraniSifirla();MessageBox.Show("Kazandın");}}void EkraniSifirla(){foreach (Button b2 in panel1.Controls){ b2.Enabled = false;}}privateint BombalariYazdir(int x, int y){int tempSayi = 0;if (y - 1 >= 0) tempSayi += oyunTablo[x, y - 1];//soldakiif (y + 1 < sutun) tempSayi += oyunTablo[x, y + 1];//sagdakiif (x - 1 >= 0)
tempSayi += oyunTablo[x - 1, y];//üstif (x + 1 < satir) tempSayi += oyunTablo[x + 1, y];//altif (x - 1 >= 0 && y - 1 >= 0) tempSayi += oyunTablo[x - 1, y - 1];//sol üstif (x - 1 >= 0 && y + 1 < sutun) tempSayi += oyunTablo[x - 1, y + 1];//sağ üstif (x + 1 < satir && y - 1 >= 0) tempSayi += oyunTablo[x + 1, y - 1];//sol altif (x + 1 < satir && y + 1 < sutun) tempSayi += oyunTablo[x + 1, y + 1];//sağ alt
return tempSayi;}
privatevoid Form1_Load(object sender, EventArgs e){ YeniOyunHazirla();}
}
Uygulama 23 Sürükle bırak uygulaması
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}bool aktif = false; int ilkX = 0, ilkY = 0;int[,] koordinat = { { 10, 220 }, { 120, 220 }, { 230, 220 } };int[] nesne = { -1, -1, -1 };privatevoid pictureBox1_MouseMove(object sender, MouseEventArgs e){
PictureBox pb = (PictureBox)sender;if (aktif == true){pb.Left += e.X - ilkX;pb.Top += e.Y - ilkY;}}privatevoid pictureBox1_MouseDown(object sender, MouseEventArgs e){PictureBox pb = (PictureBox)sender;pb.BringToFront();aktif = true; ilkX = e.X; ilkY = e.Y;}privatevoid pictureBox1_MouseUp(object sender, MouseEventArgs e){PictureBox pb = (PictureBox)sender;int index = Convert.ToInt32(pb.Tag);int sol = koordinat[index, 0];int yukari = koordinat[index, 1];
if ((pb.Left> sol - 20 && pb.Left < sol + 20)&& (pb.Top> yukari - 20 && pb.Top < yukari + 20)){pb.Left = sol;pb.Top = yukari;nesne[index] = 1;// OyunKontrol();}elsenesne[index] = -1;//aktif = false;}privatevoid OyunKontrol(){bool kazandin = true;for (int i = 0; i <nesne.Length; i++){if(nesne[i]==-1){ kazandin = false;break;}}if (kazandin == true)MessageBox.Show("Kazandın");}}
Uygulama 24 Sürükle bırak ile puzzle yapma
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}
bool aktif = false; int ilkX = 0, ilkY = 0;int[,] koordinat = { { 10, 10 }, { 110, 10 }, { 210, 10 }, { 10, 110 }, { 110, 110 }, { 210, 110 } };int[] nesne = { -1, -1, -1,-1,-1,-1 };privatevoid pictureBox1_MouseMove(object sender, MouseEventArgs e){PictureBox pb = (PictureBox)sender;if (aktif == true){pb.Left += e.X - ilkX;pb.Top += e.Y - ilkY;}}privatevoid pictureBox1_MouseDown(object sender, MouseEventArgs e){PictureBox pb = (PictureBox)sender;pb.BringToFront();aktif = true; ilkX = e.X; ilkY = e.Y;}privatevoid pictureBox1_MouseUp(object sender, MouseEventArgs e){PictureBox pb = (PictureBox)sender;int index = Convert.ToInt32(pb.Tag);int sol = koordinat[index, 0];int yukari = koordinat[index, 1];
if ((pb.Left> sol - 20 && pb.Left < sol + 20)&& (pb.Top> yukari - 20 && pb.Top < yukari + 20)){pb.Left = sol;pb.Top = yukari;nesne[index] = 1;// OyunKontrol();}
elsenesne[index] = -1;//aktif = false;}privatevoid OyunKontrol(){bool kazandin = true;for (int i = 0; i <nesne.Length; i++){if (nesne[i] == -1){ kazandin = false;break;}}if (kazandin == true)MessageBox.Show("Kazandın");}}
Uygulama 25 Tick Tack Tao Oyunu
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}
string sira = "X";privatevoid button_Click(object sender, EventArgs e){Button b = (Button)sender;b.Text = sira;int index = Convert.ToInt32(b.Tag);oyun[index] = sira;b.Enabled = false;if (sira == "X") sira = "O";else sira = "X";
OyunKontrol();//}privatevoid OyunKontrol(){bool bittiMi = false;string kazanan = "";if (oyun[0] != ""&& oyun[0] == oyun[1] && oyun[0] == oyun[2]){
bittiMi = true;kazanan = oyun[0];}elseif (oyun[3] != ""&& oyun[3] == oyun[4] && oyun[3] == oyun[5]){ bittiMi = true;kazanan = oyun[3];}elseif (oyun[6] != ""&& oyun[6] == oyun[7] && oyun[6] == oyun[8]){ bittiMi = true;kazanan = oyun[6];}elseif (oyun[0] != ""&& oyun[0] == oyun[3] && oyun[0] == oyun[6]){ bittiMi = true;kazanan = oyun[0];}elseif (oyun[1] != ""&& oyun[1] == oyun[1] && oyun[1] == oyun[7]){ bittiMi = true;kazanan = oyun[1];}elseif (oyun[2] != ""&& oyun[2] == oyun[5] && oyun[2] == oyun[8]){ bittiMi = true;kazanan = oyun[2];}elseif (oyun[0] != ""&& oyun[0] == oyun[4] && oyun[0] == oyun[8]){ bittiMi = true;kazanan = oyun[0];}elseif (oyun[2] != ""&& oyun[2] == oyun[4] && oyun[2] == oyun[6]){ bittiMi = true;kazanan = oyun[2];}
if(bittiMi){MessageBox.Show("Kazanan=" + kazanan);// btnYeni_Click(null, null);foreach (Button b in panel1.Controls){b.Enabled = false;}}}
string[] oyun = newstring[9];privatevoid btnYeni_Click(object sender, EventArgs e){ panel1.Controls.Clear();
for (int i = 0; i < 9; i++){oyun[i] = "";}int isim = -1;//for (int i = 0; i < 3; i++)//sütun{for (int j = 0; j < 3; j++)//satır
{isim++;//Button b = newButton(); b.Font = newSystem.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(162))); b.Location = newSystem.Drawing.Point(j * 50, i * 50);//b.Name = "btn" + isim;// b.Size = newSystem.Drawing.Size(50, 50);b.Text = "";//b.Tag = isim; b.Click += newSystem.EventHandler(this.button_Click);
panel1.Controls.Add(b);}}}}
Uygulama 26 Kaydırarak resim yapma oyunu
publicpartialclassForm1 : Form{public Form1(){ InitializeComponent();}
privatevoid Form1_Load(object sender, EventArgs e){ btnYeni_Click(null, null);}
Image[] resim = { RastgeleSayi.Properties.Resources._0,
RastgeleSayi.Properties.Resources._1,RastgeleSayi.Properties.Resources._2,RastgeleSayi.Properties.Resources._3,RastgeleSayi.Properties.Resources._4,RastgeleSayi.Properties.Resources._5,RastgeleSayi.Properties.Resources._6,RastgeleSayi.Properties.Resources._7,RastgeleSayi.Properties.Resources._8};int[,] oyunAlani = newint[3, 3];privatevoid btnYeni_Click(object sender, EventArgs e){int[] d = RastgeleSayiUret(0, 9, 9);int indis = -1;for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){indis++; oyunAlani[i, j] = d[indis];}}
ResimGoster();}
privatevoid ResimGoster(){int indis = -1;for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){indis++;PictureBox pb = (PictureBox)panel1.Controls.Find("pb" + indis, false)[0];pb.Image = resim[oyunAlani[i, j]];}}}
privateint[] RastgeleSayiUret(int baslangic, int bitis, int elemanSayisi){int[] d = newint[elemanSayisi];for (int i = 0; i < d.Length; i++)//Dizi elemanları başlangıç değerid[i] = -1;
Random r = newRandom();int sayi = -1;bool varMi = false;for (int i = 0; i < d.Length; i++){do{ varMi = false; sayi = r.Next(baslangic, bitis);for (int j = 0; j < i; j++){if (sayi == d[j]){ varMi = true;break;}}
}while (varMi == true);d[i] = sayi;}
return d;}
privatevoid pb_Click(object sender, EventArgs e){PictureBox pb = (PictureBox)sender;int index = Convert.ToInt32(pb.Tag);int x = index / 3;int y = index % 3;
if (y + 1 < 3 && oyunAlani[x, y + 1] == 8)//sağ kontrol{ oyunAlani[x, y + 1] = oyunAlani[x, y]; oyunAlani[x, y] = 8;}elseif (y - 1 >= 0 && oyunAlani[x, y - 1] == 8)//sol kontrol{ oyunAlani[x, y - 1] = oyunAlani[x, y]; oyunAlani[x, y] = 8;}elseif (x + 1 < 3 && oyunAlani[x+1, y] == 8)//aşağı kontrol{ oyunAlani[x+1, y] = oyunAlani[x, y]; oyunAlani[x, y] = 8;}elseif (x - 1 >=0 && oyunAlani[x - 1, y] == 8)//yukarı kontrol{ oyunAlani[x - 1, y] = oyunAlani[x, y]; oyunAlani[x, y] = 8;} ResimGoster(); BittiMi();}privatevoid BittiMi(){int index = -1;bool durum = true;for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){ index++;if(oyunAlani[i,j]!=index){durum = false;break;}}}if (durum == true)MessageBox.Show("Kazandın");}
}