Bütünlemede AA,
formatı bilmekle başlar.
Bu rehber hocanın (Adnan Kürşat Teke) gerçek ders slaytlarından ve çıkmış final sorularından çıkarıldı. Hocanın sınavı hep aynı kalıpta: 15 kısa soru × 5 puan = 75p (5 çoktan seçmeli + 5 doğru/yanlış + 5 boşluk doldurma) + 1 klasik 25 puanlık soru (kod ile form oluşturma) = 100 puan. Önce Deneme Sınavı'nı çöz, eksiğini gör; sonra Soru Bankası'nı tara; gece Cheat Sheet'le kapat.
(5 ÇS · 5 D/Y · 5 boşluk)
(kod ile form oluşturma)
Sınav Formatı — Birebir Ne Çıkıyor?
| Bölüm | Adet | Puan | Hocanın ne sorduğu |
|---|---|---|---|
| Çoktan Seçmeli | ~5 | 5'er p | Varsayılan olay, özellik adı, Math/String çıktısı, tanım |
| Doğru / Yanlış | ~5 | 5'er p | Tuzak cümleler: Math, Interval ms, private erişim, dizi sözdizimi |
| Boşluk Doldurma | ~5 | 5'er p | Kod tamamlama (Items.Add), çıktı (Substring), özellik adı |
| Klasik (25p) | 1 | 25 p | Kod ile bir formun nesnelerini oluşturma (Controls.Add) — arka sayfa |
Çalışma Rotası — Sırayla Git
1 · Deneme Sınavı
Gerçek formatta tam bir sınav (5+5+5+1). Önce bunu çöz, nerede zayıfsın gör.
Çöz2 · Çoktan Seçmeli
Hocanın en sevdiği 18 çoktan seçmeli soru — anında puanlı, cevaplı.
Başla3 · Doğru / Yanlış
18 tuzak cümle. Her tuzağı burada tanı, sınavda yakalanma.
Başla4 · Boşluk Doldurma
18 kod-tamamlama + çıktı sorusu. Ezber + mantık karışımı.
Başla5 · Klasik Form Kodu
25 puanlık can alıcı soru. Şablonu ezberle = garanti puan.
Başla6 · Konu Özetleri + Cheat Sheet
Eksik konuları H2–H12 özetlerinden tara, gece cheat sheet ile kapat.
BaşlaBackColor"), (2) Kod çıktısı (5+6+"Sayı" → 11Sayı, Substring, Math), (3) Tuzak (Math.Random C#'ta yok, Interval = milisaniye, private başka formdan erişilemez). Her bölümdeki 🎯 ve 🚨 kutuları tam bu tiplere göre.Metotlar
Metot = yalnızca çağrıldığı zaman çalışan kod bloğu. Bu hafta: metot anatomisi, aşırı yükleme, yerel/global değişken ve sınavın çıktı sorusu fabrikası olan Math & String metotları.
Teorik Temel
- Tanım: Bir sınıfın içindeki görevi yapmak için yazılan ifadeler bütünü.
- Metot vs Fonksiyon: Pratikte aynı; teorik fark → metot sınıfa bağlı, fonksiyon sınıftan bağımsız tasarlanmıştır.
- Kütüphaneler: Metotlar kütüphanelere bağlı çalışır →
using kütüphaneAdi; - Her metodun mutlaka bir dönüş (return) türü ve parametre durumu vardır.
using satırı sönük (gri) görünüyorsa, o kütüphane kodda henüz kullanılmıyor demektir.Metot Anatomisi
// düzenleyici dönüş-türü metot-adı(parametre-listesi)
public static int Topla(int a, int b)
{
// ← metodun gövdesi
return a + b; // dönüş türü int → MUTLAKA int döndürülmeli
}| Tür | Örnek | Çağırma |
|---|---|---|
| Dönüşsüz + Parametresiz | void SelamVer() | SelamVer(); |
| Dönüşsüz + Parametreli | void SelamVer(string isim) | SelamVer("Kürşat"); |
| Dönüşlü + Parametresiz | int PiSayisi() | int p = PiSayisi(); |
| Dönüşlü + Parametreli ⭐ | int Kare(int s) | int k = Kare(5); // 25 |
Aşırı Yükleme (Overloading)
Bir metodun aynı isimle, farklı parametre türleriyle/sayısıyla çalışabilmesi. Program, hangi metodun çalışacağını kullanılan parametrenin veri türünden ayırt eder. Visual Studio, metodun yanında kaç aşırı yükleme olduğunu gösterir (+2 overloads).
int islem(int x, int y) { return x + y; }
double islem(double x, double y) { return x + y; }
islem(3, 5); // → int versiyonu çalışır → 8
islem(3.2, 5.1); // → double versiyonu çalışır → 8.3Yerel vs Global Değişken
| Yerel Değişken | Global Değişken | |
|---|---|---|
| Tanım yeri | Metodun içinde | Sınıf içinde, metotların dışında |
| Erişim | Sadece kendi bloğu | Sınıftaki tüm metotlar |
| Ömür | Metot bitince ölür | Form yaşadıkça değer korunur |
public partial class Form1 : Form
{
int sayac = 0; // GLOBAL → tüm metotlar görür, değer korunur
private void button1_Click(object sender, EventArgs e)
{
int yerel = 5; // YEREL → sadece bu metot görür
sayac++; // her tıklamada artar: 1, 2, 3...
label1.Text = sayac.ToString();
}
}Math Sınıfı — Çıktı Sorusu Fabrikası
| Metot | Görevi | Örnek → Sonuç |
|---|---|---|
Math.Abs(s) | Mutlak değer | Abs(-7) → 7 |
Math.Floor(o) | ALT tamsayıya yuvarlar | Floor(4.9) → 4 |
Math.Ceiling(o) | ÜST tamsayıya yuvarlar | Ceiling(4.1) → 5 |
Math.Round(o) | EN YAKINa yuvarlar (.5 → üste) | Round(4.5) → 5 |
Math.Pow(t, k) | Üs alma | Pow(2, 3) → 8 |
Math.Sqrt(s) | Karekök | Sqrt(25) → 5 |
Math.Max / Min | Büyüğü / küçüğü döndürür | Max(3,9) → 9 |
Math.Sin/Cos/Tan/Asin | Trigonometrik değer | Cos(0) → 1 |
Floor(4.5)=4 · Ceiling(4.5)=5 · Round(4.5)=5. Üçünü aynı soruda karıştırtmaya çalışırlar!String Metotları
| Metot | Görevi | Örnek → Sonuç |
|---|---|---|
s.IndexOf("e") | İlk geçtiği indeks (0'dan başlar!) | "Kürşat Teke" → 8 |
s.LastIndexOf("e") | Son geçtiği indeks | "Kürşat Teke" → 10 |
s.ToLower() / ToUpper() | Küçük / büyük harfe çevirir | "ABC" → "abc" |
s.Replace("a","o") | a'ları o yapar | "kara" → "koro" |
s.Remove(3) | İndeksten sonrasını siler | "Merhaba" → "Mer" |
s.Substring(3) | İndeksten sonrasını döndürür | "Merhaba" → "haba" |
s.Split(',') | Karaktere göre böler (dizi döner!) | "a,b,c" → {"a","b","c"} |
s.ElementAt(1) | İndeksteki tek karakter | "Merhaba" → 'e' |
String.Join("-", dizi) | Diziyi ayraçla birleştirir | → "a-b-c" |
String.Concat(s1,s2) | Uç uca ekler | "Al"+"i" → "Ali" |
String.Format("Yaş: {0}", 20) | Kalıba göre biçimlendirir | → "Yaş: 20" |
"Merhaba".Remove(3) → "Mer" · "Merhaba".Substring(3) → "haba". Bu ikili sınavda neredeyse her yıl yan yana!Join / Concat / Format doğrudan String. sınıfından, diğerleri degisken. üzerinden çağrılır.Olaylar (Events)
Windows Forms'un kalbi: program, kullanıcı aksiyonlarına olaylarla cevap verir. Delegate → EventHandler → Designer.cs zinciri bu haftanın teorik soru deposu.
Teorik Temel
- Olay: Programın belirli bir aksiyona kodlarla verdiği cevap.
- Delegate (Delegasyon): Olay kodları önce delegasyonlarda saklanır. Delegasyon = belleğin özel bir alanında kapsülleme yöntemiyle saklanan özel metot. Pointer yapısıyla benzer çalışır.
- Olay çalıştırılacağı zaman hazır delegasyon çağrılarak olaya eklenir → olay kullanıma hazır olur.
- Event Handler: Olayın çalışmasını sağlayan, özel parametrelere sahip metot. Arkaplanda olayın kendisine bağlıdır.
private void Form1_Load(object sender, EventArgs e)
{
// sender → bu olayı HANGİ NESNENİN başlattığını ifade eder
// e → olaya ÖZGÜ özellik ve metotların bulunduğu nesne
}Designer.cs Gerçeği
EventHandler'ların referansları (bağlantıları), arkaplan kodlarının bulunduğu Designer.cs dosyasındadır. Nesneye çift tıklayınca Visual Studio hem metodu hem bağlantıyı otomatik yazar:
this.button1.Click += new System.EventHandler(this.button1_Click); // ↑ bu satır olmadan metot SADECE süs olarak durur, hiç çalışmaz!
label1_MouseEnter gibi bir metodu elle yazmak olayı BAĞLAMAZ! Designer.cs'te referansı oluşmadığı için metot asla çalışmaz. Ayrıca elle metot yazılacaksa (object sender, EventArgs e) parametreleri mutlaka eklenmeli, yoksa yazım hatası olur. Hoca bunu hem teorik hem debugging sorusu olarak sormayı çok seviyor.Varsayılan Olaylar — Ezber Tablosu
Her görsel nesnenin bir varsayılan olayı vardır → tasarımda çift tık = o olayın kodu açılır. Başka olay için: Properties → ⚡ Olaylar sekmesi → olayın yanına çift tık.
| Nesne | Varsayılan Olay |
|---|---|
| Button · Label · PictureBox | Click |
| Form | Load |
| TextBox ⭐ | TextChanged |
| CheckBox · RadioButton | CheckedChanged |
| ListBox · ComboBox | SelectedIndexChanged |
| Timer | Tick |
Bir Handler → Birden Fazla Nesne
Olaylar sekmesinden button2'nin Click olayına var olan button1_Click seçilebilir → iki buton da aynı metodu çalıştırır (metotta "2 references" görünür). Hangi butonun tetiklediği sender ile bulunur:
private void button1_Click(object sender, EventArgs e)
{
Button tiklanan = sender as Button; // 'as' operatörü (H3) ile dönüşüm
label1.Text = tiklanan.Text + " tıklandı";
}Timer & Kapsayıcılar
Kısa ama soru çıkarması en kolay hafta. Timer'ın 3 özelliği + 1 olayını ve 6 kapsayıcının farklarını bilen, bu haftanın puanını cebine koyar.
Timer
- Formda görünmeyen, arkaplanda çalışan bir bileşen (component) nesnesidir — forma sürüklenince formun altındaki gri alana gelir.
- Görsel nesne olmadığı için çok az özelliği vardır.
- Tek olayı Tick'tir → gözle görülebilir bir döngü gibi çalışır.
| Özellik | Görevi |
|---|---|
Enabled | Timer aktif mi? (true/false) |
Interval | Tick olayının kaç MİLİSANİYEDE bir çalışacağı (1000 = 1 sn) |
Tag | Takma isim |
int saniye = 0; // global sayaç
private void btn_baslat_Click(object sender, EventArgs e)
{
timer1.Interval = 1000; // 1000 ms = 1 saniye
timer1.Enabled = true; // timer çalışmaya başlar
}
private void timer1_Tick(object sender, EventArgs e)
{
saniye++; // her tikte +1
lbl_sayac.Text = saniye.ToString(); // ekrana yaz
}Interval = 1 → 1 saniye DEĞİL, 1 milisaniyedir! "Her saniye çalışsın" için 1000 yazılmalı.Kapsayıcılar (Containers)
Kapsayıcı = içinde görsel nesneler barındırabilen nesne. Altındaki nesneler kendi içinde gruplanır; kapsayıcının bazı özellikleri (Enabled, Visible) değiştirilince alt nesnelerin özellikleri de değişir.
Panel
Düz alan; yerleşim tamamen programcı kontrolünde (özgür). Varsayılan kenarlık yok.
FlowLayoutPanel
Özgürlük yok — nesneleri otomatik sıralar: soldan sağa / sağdan sola / yukarıdan aşağı / aşağıdan yukarı.
TableLayoutPanel
Tablo hücreleri sunar; her hücreye TEK nesne. Daha fazlası gerekirse hücreye ayrı panel eklenir.
SplitContainer
İki panel + ayraç (splitter). Yan yana / alt alta. Ayraç kalınlığı, minimum boyut, sabit ayraç ayarlanır.
TabControl
Tek alanda sekmeli sayfalar. Sekme sayısı belirlenir, her sayfa ayrı düzenlenir.
GroupBox
Panel gibi özgür yerleşim ama varsayılan kenarlık + BAŞLIK var. Kenarlık özellikleri düzenlenemez.
Sınıflar & Formlar Arası Geçiş
Bu dersin en ağır ve en kesin konusu (klasik 25p sorunun temeli). İki blok: sınıf + kapsülleme + get-set, ve çoklu form yönetimi (Show / Hide / Close / ShowDialog).
Sınıf Nedir?
En özet hali: ortak fonksiyonları (metot, özellik, işlem) barındıran kod bloğu. Değişken olarak oluşturduğumuz birçok değer aslında sınıfların nesneleştirilmiş halidir — Windows Forms'taki görsel nesneler de birer sınıftır!
Font isim = new Font(...); // Font sınıfı → isim nesnesi Random r = new Random(); // Random sınıfı → r nesnesi Button btn_tikla = new Button(); // görsel nesneler de sınıf! Math.Sqrt(25); // Math static sınıf → new gerekmez
Sınıf Oluşturma
// erisimDuzenleyici (static) class sınıf_adı { ... }
public static class Bilgiler
{
// sınıf içine yazılacak kodlar
}- Düzen için ayrı dosya: Visual Studio → Proje > Sınıf Ekle...
- Sınıf ve metotlar
public staticyazılırsa, herhangi bir formdan nesne oluşturmadan, sadece sınıf adıyla çağrılır:Bilgiler.Metot();
Erişim Düzenleyiciler — Tablo Sorusu!
| Düzenleyici | Sınıf İçi | Proje İçi | Alt Sınıf | Farklı Assembly* |
|---|---|---|---|---|
private | ✔ | ✘ | ✘ | ✘ |
public | ✔ | ✔ | ✔ | ✔ |
protected | ✔ | ✘ | ✔ | ~ |
internal | ✔ | ✘ | ✘ | ✔ |
protected internal | ✔ | ✘ | ✔ | ✔ |
private protected | ✔ | ✘ | ✔ | ✘ |
Kapsülleme & Get-Set
Mantık: Sınıflar arası veri aktarımı için verinin public olması gerekir; ama kapsülleme (encapsulation) kuralına göre hassas veriler kullanıcıdan gizli olmalı. Çözüm: veri private tanımlanır, aktarım get (oku) ve set (yaz) ile yapılır.
public static class Bilgiler
{
private static int elemanSayi; // veri GİZLİ
public static int getElemanSayisi() // okuma kapısı
{ return elemanSayi; }
public static void setElemanSayisi(int sayi) // yazma kapısı
{ elemanSayi = sayi; }
}
// Kullanım:
Bilgiler.setElemanSayisi(10);
int x = Bilgiler.getElemanSayisi(); // → 10public static class Bilgiler
{
private static int elemanSayi; // veri yine GİZLİ
public static int Sayi // property (özellik)
{
get { return elemanSayi; } // okurken çalışır
set { elemanSayi = value; } // yazarken çalışır → 'value'!
}
}
// Kullanım — metot gibi değil DEĞİŞKEN gibi:
Bilgiler.Sayi = 10; // set çalışır (value = 10)
int x = Bilgiler.Sayi; // get çalışır → 10value. C#'ın sabit anahtar kelimesidir. Ayrıca bu kalıp formlar arası veri taşımanın da standart yoludur: Form1'de Bilgiler.Sayi = 10; → Form2'de oku.Formlar Arası Geçiş — %100 Çıkar!
Yeni form: Proje > Form Ekle... Sonrasında 5 temel hareket:
// 1) YENİ FORM AÇ — her çalıştığında YENİ pencere açar! Form2 f = new Form2(); f.Show(); // 2) GİZLE — form arkaplanda AÇIK kalır! this.Hide(); // kendi formunu gizle f.Hide(); // başka formu gizle // 3) KAPAT — ana form kapatılırsa PROGRAM TAMAMEN KAPANIR! this.Close(); // 4) GİZLİ FORMU GERİ GETİR — Form2 açık olmalı, yoksa hata! Form d = Application.OpenForms["Form2"]; d.Show(); // 5) DİYALOG PENCERESİ — arkadaki KODLAR DURUR! f.ShowDialog();
| Show() | ShowDialog() | |
|---|---|---|
| Pencere tipi | Bağımsız pencere | Diyalog (modal) |
| Arkadaki kod | Çalışmaya devam eder | DURUR, kapanana dek bekler |
| Başka pencereye geçiş | Serbest | Engellenir |
new Form2() + Show() her tıklamada yeni pencere açar (5 tık = 5 pencere). 2) Hide() kapatmaz, form arkaplanda açık kalır. 3) ShowDialog() kodu bloklar — Timer kullanılıyorsa Tick olayları da bekler!Kontroller & Formlar
Temel tanımlar + ortak özellikler + 7 kontrolün kritik özellikleri. Bu haftadan gelen sorular kısa ve nokta atışıdır — tabloları ezberle, puanı kap.
Tanımlar (Aynen Sorulur)
- Görsel Programlama: "Kodlamasında görsel nesnelerin kullanılabildiği, nesneye dayalı üst seviyeli programlama mantığıdır."
- Dil: C# · Yazılım iskeleti: .NET Framework
- Ekranda görülen görsel nesnelere KONTROL adı verilir.
- Bileşenler: Görsel olarak görünmeyen, arkaplanda çalışan nesneler (örn. Timer).
Ortak Özellikler
| Özellik | Görevi |
|---|---|
Name | Kodda kullanılan isim — BENZERSİZ olmak ZORUNDA |
Tag | Takma ad — benzersiz olmak zorunda DEĞİL |
Text | Ekranda görünen yazı — kod kısmına etkisi YOK |
Visible / Enabled | Görünür mü? / Aktif mi? |
Size / Location | Boyut (Width+Height) / Konum |
Anchor | Belirlenen kenarlara uzaklığı sabit tutar |
Dock | Kenara yaslar veya tüm alana yayar |
Locked | Taşıma/boyutlandırmayı kilitler |
TabIndex | Tab tuşuyla odak sırası |
Kontroller ve Kritik Özellikleri
| Kontrol | Görevi | Varsayılan Olay | Öne Çıkanlar |
|---|---|---|---|
| Button | Temel etkileşim | Click | FlatStyle, UseMnemonic (& kısayolu), AutoEllipsis (… ekler) |
| Label | Yazı gösterme | Click | BorderStyle, AutoSize |
| TextBox | Veri girişi | TextChanged | Multiline, PasswordChar, ReadOnly, ScrollBars, WordWrap, CharacterCasing |
| CheckBox | Çoklu seçim | CheckedChanged | Checked (2'li), CheckState (3'lü), ThreeState, AutoCheck |
| RadioButton | Tekli seçim | CheckedChanged | (CheckBox benzeri) |
| ListBox | Liste + seçim | SelectedIndexChanged | Items, Sorted, MultiColumn, SelectionMode, DataSource |
| PictureBox | Resim gösterme | Click | SizeMode, ErrorImage (hata resmi), InitialImage (yüklenirken) |
Lines'ın çalışması için Multiline=true şart. PasswordChar = kendi karakterin, UseSystemPasswordChar = sistemin şifre karakteri.Değişkenler & Operatörler
Veri türleri, tip dönüşümleri (Parse/TryParse!) ve operatörler. Debugging sorularının ham maddesi bu haftadır: F/L harfi, tek/çift tırnak, true/True farkı...
Temel Veri Türleri
int sayi = 5; // varsayılan tamsayı türü: int double ondalik = 18.25; // varsayılan ondalık türü: double (NOKTA ile!) char karakter = 'A'; // TEK tırnak — tek karakter string yazi = "Kürşat"; // ÇİFT tırnak — herhangi yazı bool karar = false; // SADECE true / false
isim ≠ iSiM. 2) Aynı değişken tekrar tanımlanamaz: int sayi=5; int sayi=3; ❌. 3) long lng=7000000000L; ve float flt=5.68F; — L ve F harfleri zorunlu, yoksa veri dönüştürme hatası! 4) bool'a True, t, 1 yazılamaz — sadece true/false.İşlem Önceliği & String Birleştirme
Öncelik (yüksekten düşüğe): () → * / % → + - → > < >= <= → == != → && → || → =. Aynı öncelikte soldan sağa.
Console.WriteLine(5 + 6 + "Sayı"); // → "11Sayı" (önce sayılar toplanır)
Console.WriteLine("Sayı" + 5 + 6); // → "Sayı56" (metinden sonra hepsi metin!)+ soldan sağa ilerler; metinle karşılaşınca her şey birleştirmeye dönüşür.Tip Dönüşümleri (Type Casting)
| Yöntem | Ne zaman? | Örnek |
|---|---|---|
| Bilinçsiz / Örtülü (implicit) | Küçük → Büyük tür, otomatik, kayıpsız | int a=5; long b=a; |
| Bilinçli (explicit) | Büyük → Küçük, zorla, veri kaybı riski! | double d=9.78; int i=(int)d; //9 |
| Convert sınıfı | Her tür arası (sayı, yazı, tarih...) | int i=Convert.ToInt32("25"); |
| Parse | String → diğer türler. null gelirse HATA! | int i=int.Parse("25"); |
| TryParse | Hata kontrollü; bool döndürür | bool ok=int.TryParse("25", out i); |
as → nesneyi geçici olarak başka türde kullandırır (nesne as Button). is → nesne o türden mi diye kontrol eder, true/false döndürür.Operatörler — 4 Grup
Aritmetik
+ - * / % ve ++ / -- (1 artır/azalt). ⚠️ ++a önce artırır, a++ önce kullanır — sonuç değişir!
Atama
= += -= *= /= %= → i += 4 ile i = i + 4 aynıdır.
Karşılaştırma
== != > < >= <= → sonuç daima true/false. Çoğunlukla karar yapılarında.
Mantıksal
&& ikisi de true ise · || en az biri true ise · ! tersini alır.
= ATAMA, == KARŞILAŞTIRMA! if (a = 5) derleme hatası verir.Karar Yapıları & Key Olayları
if/else-if/else zinciri, switch-case (break zorunlu!) ve klavye olayları. KeyPreview tuzağı bu haftanın yıldızı.
If / Else If / Else
int a = 5, b = 4;
if (a > b) // 1. şart
{ Console.WriteLine("a sayısı büyük"); }
else if (a < b) // 1. yanlışsa kontrol edilir
{ Console.WriteLine("b sayısı büyük"); }
else // hiçbiri değilse (eşitlik)
{ Console.WriteLine("a ve b sayısı eşit"); }if'ler yazılırsa program bütün şartları tek tek kontrol eder → sistem yükü artar. else if ile ilk doğru şarttan sonra diğerleri hiç kontrol edilmez. Bu gerekçe teorik soru olarak sorulur.Switch / Case
switch (degisken)
{
case durum_1:
// çalışacak kodlar
break; // her case sonunda ZORUNLU!
case durum_2:
// çalışacak kodlar
break;
default: // else gibidir — ZORUNLU DEĞİL
break;
}break; unutulursa derleme hatası. default bloğu opsiyoneldir; kullanılırsa case'lerin dışındaki tüm durumlarda çalışır.Key (Klavye) Olayları
| Olay | Ne zaman çalışır? | Args türü |
|---|---|---|
KeyDown | Tuşa basıldığı an | KeyEventArgs |
KeyUp | Tuştan el çekildiği an | KeyEventArgs |
KeyPress | Basıldığında — karakter tuşlarında da çalışır | KeyPressEventArgs |
| Yöntem | Hangi olayda? | Ne verir? |
|---|---|---|
e.KeyChar | KeyPress | Basılan tuşu karakter olarak |
e.KeyValue | KeyDown / KeyUp | Tuşun ASCII değerini |
e.KeyCode | KeyDown / KeyUp | Tuşun ismini |
e.KeyData | KeyDown / KeyUp | Tuş + düzenleyici (Shift, Ctrl) bilgisi |
Döngüler
for / foreach / while / do-while + break & continue. Çıktı soruları ("bu döngü ne yazar?") buradan gelir.
For & Foreach
// for (başlatıcı; koşul; yineleyici)
// başlatıcı → döngüden önce 1 KEZ çalışır
// koşul → her turda kontrol edilir
// yineleyici→ her iterasyondan SONRA çalışır
for (int i = 1; i <= 10; i++)
{
listBox1.Items.Add("Mesaj " + i); // 10 kez çalışır
}
// foreach (veriTuru degisken in koleksiyon) — 'in' sabittir
foreach (var eleman in lst_donguler.Items) // ListBox'ta gez
{
cb_yeniElemanlar.Items.Add(eleman); // ComboBox'a aktar
}Foreach'in tur sayısı tamamen koleksiyona bağlıdır (dizi, liste, ListBox/ComboBox Items...). İterasyon = tekrarlama; işlemlerin döngülerle yazılması.
While & Do-While
int i = 0;
while (i < 5) // şart BAŞTA kontrol edilir
{
i++; // şarta müdahale BLOĞUN İÇİNDE (for'dan farkı!)
}
do
{
// önce çalışır (şart yanlış olsa bile 1 kez!)
} while (sart); // sonra şart — sondaki ; UNUTMA!| while | do-while | |
|---|---|---|
| Şart kontrolü | Önce | Sonra |
| Minimum çalışma | 0 kez | EN AZ 1 KEZ |
; unutulmamalı!break & continue
for (int i = 1; i <= 5; i++)
{
if (i == 3) continue; // 3'ü ATLA (sadece bu iterasyonu pas geç)
if (i == 5) break; // 5'te döngüden TAMAMEN ÇIK
listBox1.Items.Add(i); // ÇIKTI: 1, 2, 4
}Diziler & Listeler
Tek değişkende çok değer. İndeksin 0'dan başlaması ve Remove/RemoveAt farkı bu haftanın puan kapanları.
Diziler
string[] isimler; // ← bu haliyle KULLANILAMAZ! İki yoldan biri şart:
// Yol 1: Elemanları girerek (boyut = eleman sayısı)
string[] isimler = new string[] { "Adnan", "Kürşat", "Teke" };
// isimler[0]="Adnan" [1]="Kürşat" [2]="Teke" → İNDEKS 0'DAN BAŞLAR!
// Yol 2: Boyut belirterek (içi boş)
string[] bos = new string[5]; // 5 eleman → indeksler 0–4
// Çok boyutlu dizi (boyutlar VİRGÜLLE ayrılır):
int[,] dizi = new int[2,3] { {0,1,2}, {3,4,5} };
// dizi[0,2] → 2 dizi[1,0] → 3dizi[5] → IndexOutOfRange hatası. İki boyut: dizi[x,y], üç boyut: dizi[z,x,y].Listeler (List)
Dizilerden farkı: eleman eklemek/çıkarmak çok daha kolay; daha düzensiz veriler için kullanılır. List<veri_turu> ad = new List<veri_turu>(); (kapasite opsiyonel).
| Komut | Görevi |
|---|---|
liste.Add(değer) | Sona değer ekler |
liste.AddRange(koleksiyon) | Bir dizi/listeyi topluca ekler |
liste.Insert(indis, değer) | Belirtilen indise ekler |
liste.Clear() | Tamamını temizler |
liste.Remove(değer) | Değere eşit ilk karşılaşılanı siler |
liste.RemoveAll(yüklem) | Şarta uyan HER elemanı siler |
liste.RemoveAt(indis) | Belirtilen indisteki elemanı siler |
liste.RemoveRange(indis, sayı) | İndisten itibaren sayı kadar siler |
Remove("Ali") DEĞERE göre siler; RemoveAt(2) İNDİSE göre siler. Sınavda mutlaka karıştırtmaya çalışırlar!Kod Yazma Soruları
Hocanın klasik tarzında 6 "kod yaz" sorusu — önce kendin kâğıda yazmayı dene, sonra çözümle karşılaştır.
Soru 1 · Metot (H9) — İki sayının büyüğünü döndüren metot
"Buyuk adında bir metot yazın; butona basınca textBox'lardaki sayılarla çağrılıp sonuç label'a yazılsın."
int Buyuk(int a, int b) // dönüşlü + parametreli metot
{
if (a > b)
return a;
else
return b;
// Alternatif: return Math.Max(a, b);
}
private void button1_Click(object sender, EventArgs e)
{
int s1 = Convert.ToInt32(textBox1.Text); // string → int
int s2 = Convert.ToInt32(textBox2.Text);
label1.Text = Buyuk(s1, s2).ToString(); // çağır, sonucu yaz
}Soru 2 · Sınıf + Kapsülleme (H12)
"Ogrenci sınıfı oluşturun; ad bilgisi kapsülleme kuralına uygun saklansın ve Form2'den okunabilsin."
public static class Ogrenci
{
private static string ad; // kapsülleme: veri GİZLİ
public static string Ad // property ile kontrollü erişim
{
get { return ad; }
set { ad = value; }
}
}
// Form1'den: Ogrenci.Ad = "Ferhat";
// Form2'den: label1.Text = Ogrenci.Ad; ← formlar arası veri taşıma!Soru 3 · Timer (H11) — Geri sayım
"Butona basınca 10'dan geriye sayan, 0'da duran sayaç yazın."
int kalan = 10; // GLOBAL değişken (neden? H9!)
private void btn_baslat_Click(object sender, EventArgs e)
{
kalan = 10;
timer1.Interval = 1000; // 1 saniye = 1000 ms
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
kalan--;
lbl_sayac.Text = kalan.ToString();
if (kalan == 0)
timer1.Enabled = false; // sayaç durur
}Soru 4 · Form Geçişi (H12-13)
"Butona basınca Form1 gizlensin, Form2 açılsın; Form2'deki butonla gizli Form1 geri gelsin."
// Form1 içindeki buton:
private void btn_gec_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show(); // Form2'yi aç
this.Hide(); // Form1'i gizle (arkaplanda AÇIK kalır!)
}
// Form2 içindeki buton:
private void btn_geri_Click(object sender, EventArgs e)
{
Form f1 = Application.OpenForms["Form1"]; // gizli Form1'i bul
f1.Show(); // göster
this.Close(); // Form2'yi kapat
}Soru 5 · Foreach + List (H5 + H6 karma)
"ListBox'taki tüm elemanları foreach ile bir List'e aktarın."
List<string> liste = new List<string>();
private void button1_Click(object sender, EventArgs e)
{
foreach (var eleman in listBox1.Items) // koleksiyonda gez
{
liste.Add(eleman.ToString()); // listeye ekle
}
}Soru 6 · Overloading (H9) — Alan hesabı
"Alan metodunu kare (tek parametre) ve dikdörtgen (iki parametre) için aşırı yükleyin."
int Alan(int kenar) // kare versiyonu
{
return kenar * kenar;
}
int Alan(int en, int boy) // AYNI İSİM, FARKLI PARAMETRE = overloading
{
return en * boy;
}
// Alan(5) → 25 (ilk metot)
// Alan(3, 4) → 12 (ikinci metot)Hata Avı (Debugging)
10 buggy kod. Önce hatayı kendin bul, sonra "Hatayı Göster"e bas. Sınavdaki debugging sorularının birebir provası.
Cheat Sheet
Yatmadan önce son okuma. Buradaki her satır geçmişte soru olmuş ya da olmaya aday.
Varsayılan Olaylar
- Button · Label · PictureBox →
Click - Form →
Load - TextBox →
TextChanged⭐ - CheckBox · RadioButton →
CheckedChanged - ListBox · ComboBox →
SelectedIndexChanged - Timer →
Tick
Tanım Cümleleri
- Görsel programlama: nesneye dayalı, üst seviyeli mantık
- Ekrandaki görsel nesne = Kontrol
- Delegate: kapsüllenmiş özel metot, pointer benzeri
- Assembly: projenin .exe / .dll kısmı
- Enum: numaralandırılmış sıralı ifadeler
- İterasyon: işlemlerin döngülerle tekrarı
İkili Kapışmalar 1
- Name / Tag → benzersiz zorunlu / değil
- Anchor / Dock → mesafe korur / kenara yapışır
- Checked / CheckState → 2 durum / 3 durum
- CheckBox / RadioButton → çoklu / tekli seçim
- = / == → atama / karşılaştırma
- as / is → dönüştürür / tür kontrolü (bool)
İkili Kapışmalar 2
- Parse / TryParse → null'da hata / bool döner, hatada 0
- implicit / explicit → küçük→büyük oto. / büyük→küçük zorla (kayıp!)
- while / do-while → önce şart / en az 1 kez çalışır
- break / continue → döngüden çıkar / turu atlar
- Remove / RemoveAt → değere / indise göre siler
- Metot / Fonksiyon → sınıfa bağlı / bağımsız
İkili Kapışmalar 3 (Ağır Konular)
- Remove(i) / Substring(i) → baş tarafı / kuyruk tarafı
- Floor / Ceiling / Round → alta / üste / en yakına (.5→üst)
- Yerel / Global → metot içi / metot dışı (değer korunur)
- Hide / Close → gizler (açık kalır) / kapatır (ana form→program biter)
- Show / ShowDialog → bağımsız / kod DURUR (modal)
- Panel / GroupBox → sade / başlık+kenarlık (düzenlenemez)
Key Olayları
- KeyChar → karakter (KeyPress)
- KeyCode → tuşun ismi (KeyDown/Up)
- KeyValue → ASCII değeri (KeyDown/Up)
- KeyData → tuş + Shift/Ctrl bilgisi
- KeyPreview=true olmadan form Key olayları çalışmaz!
Sayısal Kapanlar
- n elemanlı dizinin son indeksi = n−1
- Timer
Interval= milisaniye (1 sn = 1000) 5+6+"X"→ "11X" ·"X"+5+6→ "X56"IndexOf0'dan sayar- TryParse başarısız → değişken 0
long → L,float → Fharfi zorunlu
Form Geçiş 4'lüsü
new Form2(); f.Show();→ yeni açar (her seferinde!)this.Hide();→ gizler, açık kalırApplication.OpenForms["Form2"]→ gizliyi getir (açık olmalı!)f.ShowDialog();→ modal, kod + timer durur- Ana form
Close()→ program tamamen kapanır
Get-Set Kalıbı
private static int x;→ veri gizli (kapsülleme)get { return x; }→ okurken çalışırset { x = value; }→ yazarken; value = atanan değer- Erişim:
Sinif.Ozellik = 10;(değişken gibi) - Elle yazılan event metodu çalışmaz → Designer.cs bağı şart
Deneme Sınavı
Hocanın gerçek formatında tam bir sınav: 5 çoktan seçmeli + 5 doğru/yanlış + 5 boşluk + 1 klasik (25p) = 100 puan. Önce kendin çöz (kâğıda yaz), sonra her sorunun altındaki "Cevabı Göster"e bas. Hedef: ≥ 70.
Çoktan Seçmeli Bankası
Hocanın en sık sorduğu 18 çoktan seçmeli soru. Bir şıkka tıkla → anında doğru/yanlış + açıklama. Skorun sol üstteki halkaya işler.
Doğru / Yanlış Bankası
Hocanın 18 tuzak cümlesi. Doğru mu Yanlış mı? Çoğu küçük bir kelimeyle yanıltır (Floor/Ceiling, milisaniye, Math.Random...). Tıkla, açıklamayı oku, tuzağı ezberle.
Boşluk Doldurma Bankası
18 boşluk doldurma: kod satırı tamamlama (Items.Add, Controls.Add...) ve çıktı bulma (Substring, birleştirme, Math). Önce kendin yaz, sonra cevabı aç.
Klasik Soru · Kod ile Form Oluşturma
Sınavın 25 puanlık son sorusu hep aynı tip: kod ile bir formun nesnelerini (new) oluşturup özelliklerini atayıp this.Controls.Add ile forma eklemek. 1. soru geçmiş finalin tıpkısıdır — şablonu ezberle, hangi senaryo gelirse uygula.
Tür ad = new Tür(); (2) ad.Text / BackColor / ForeColor = ...; (3) ad.Location = new Point(x,y); (4) ad.Size = new Size(w,h); (5) this.Controls.Add(ad);Butona tıklama isteniyorsa:
ad.Click += new EventHandler(ad_Click); + ayrı bir ad_Click metodu.