Yarın bütünleme var — gerçek formatına göre hazır

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.

75p
15 kısa soru × 5p
(5 ÇS · 5 D/Y · 5 boşluk)
25p
1 klasik soru
(kod ile form oluşturma)
45
interaktif quiz sorusu
57+
çözümlü banka sorusu

Sınav Formatı — Birebir Ne Çıkıyor?

BölümAdetPuanHocanın ne sorduğu
Çoktan Seçmeli~55'er pVarsayılan olay, özellik adı, Math/String çıktısı, tanım
Doğru / Yanlış~55'er pTuzak cümleler: Math, Interval ms, private erişim, dizi sözdizimi
Boşluk Doldurma~55'er pKod tamamlama (Items.Add), çıktı (Substring), özellik adı
Klasik (25p)125 pKod ile bir formun nesnelerini oluşturma (Controls.Add) — arka sayfa

Çalışma Rotası — Sırayla Git

BAŞLA

1 · Deneme Sınavı

Gerçek formatta tam bir sınav (5+5+5+1). Önce bunu çöz, nerede zayıfsın gör.

Çöz
5p

2 · Çoktan Seçmeli

Hocanın en sevdiği 18 çoktan seçmeli soru — anında puanlı, cevaplı.

Başla
5p

3 · Doğru / Yanlış

18 tuzak cümle. Her tuzağı burada tanı, sınavda yakalanma.

Başla
5p

4 · Boşluk Doldurma

18 kod-tamamlama + çıktı sorusu. Ezber + mantık karışımı.

Başla
25p

5 · Klasik Form Kodu

25 puanlık can alıcı soru. Şablonu ezberle = garanti puan.

Başla
GECE

6 · Konu Özetleri + Cheat Sheet

Eksik konuları H2–H12 özetlerinden tara, gece cheat sheet ile kapat.

Başla
Hocanın Soru Tarzı — 3 Tip Hoca hep aynı 3 tipi sorar: (1) Tanım/özellik ezberi ("ListBox'ın varsayılan olayı?", "Label arka plan rengi → BackColor"), (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.
Telefon İçinSol üstteki ☰ menüden bölümler arası geç. İlerlemen otomatik kaydedilir — sayfayı kapatıp açsan kaldığın yerden devam edersin. 🍀
09
Ağır KonuHafta 9Zorluk: ★★★☆

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.
İpucuVisual Studio'da bir using satırı sönük (gri) görünüyorsa, o kütüphane kodda henüz kullanılmıyor demektir.

Metot Anatomisi

MetotAnatomisi.cs
// 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 + Parametresizvoid SelamVer()SelamVer();
Dönüşsüz + Parametrelivoid SelamVer(string isim)SelamVer("Kürşat");
Dönüşlü + Parametresizint 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).

Overloading.cs
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.3
TuzakSadece dönüş türü farklı olan iki metot aşırı yükleme DEĞİLDİR ve derleme hatası verir. Fark mutlaka parametrelerde olmalı.

Yerel vs Global Değişken

Yerel DeğişkenGlobal Değişken
Tanım yeriMetodun içindeSınıf içinde, metotların dışında
ErişimSadece kendi bloğuSınıftaki tüm metotlar
ÖmürMetot bitince ölürForm yaşadıkça değer korunur
YerelGlobal.cs
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ı

MetotGöreviÖrnek → Sonuç
Math.Abs(s)Mutlak değerAbs(-7) → 7
Math.Floor(o)ALT tamsayıya yuvarlarFloor(4.9) → 4
Math.Ceiling(o)ÜST tamsayıya yuvarlarCeiling(4.1) → 5
Math.Round(o)EN YAKINa yuvarlar (.5 → üste)Round(4.5) → 5
Math.Pow(t, k)Üs almaPow(2, 3) → 8
Math.Sqrt(s)KarekökSqrt(25) → 5
Math.Max / MinBüyüğü / küçüğü döndürürMax(3,9) → 9
Math.Sin/Cos/Tan/AsinTrigonometrik değerCos(0) → 1
Sınavda ÇıkarKlasik tuzak üçlüsü: Floor(4.5)=4 · Ceiling(4.5)=5 · Round(4.5)=5. Üçünü aynı soruda karıştırtmaya çalışırlar!

String Metotları

MetotGö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"
Tuzak — Remove vs Substringİkisi de indeks alır ama Remove kalan BAŞ tarafı verir, Substring KUYRUK tarafı verir. "Merhaba".Remove(3) → "Mer" · "Merhaba".Substring(3) → "haba". Bu ikili sınavda neredeyse her yıl yan yana!
İpucuJoin / Concat / Format doğrudan String. sınıfından, diğerleri degisken. üzerinden çağrılır.
10
Ağır KonuHafta 10Zorluk: ★★★★

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.
EventHandler.cs
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:

Form1.Designer.cs
this.button1.Click += new System.EventHandler(this.button1_Click);
// ↑ bu satır olmadan metot SADECE süs olarak durur, hiç çalışmaz!
En Büyük TuzakKod alanına 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.

NesneVarsayılan Olay
Button · Label · PictureBoxClick
FormLoad
TextBox ⭐TextChanged
CheckBox · RadioButtonCheckedChanged
ListBox · ComboBoxSelectedIndexChanged
TimerTick

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:

OrtakHandler.cs
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ı";
}
Sınavda Çıkar"sender nedir?" → olayı başlatan nesne. "e nedir?" → olaya özgü özellik/metotları taşıyan nesne. "EventHandler bağlantıları nerede tutulur?" → Designer.cs. Bu üçlü neredeyse garanti.
11
Ağır KonuHafta 11Zorluk: ★★☆☆

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.
ÖzellikGörevi
EnabledTimer aktif mi? (true/false)
IntervalTick olayının kaç MİLİSANİYEDE bir çalışacağı (1000 = 1 sn)
TagTakma isim
Sayac.cs
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
}
TuzakInterval = 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ınavda Çıkar — Panel vs GroupBoxGroupBox'ın başlığı ve sınır çizgisi vardır, Panel'in yoktur. GroupBox'ın sınırı özelleştirilemez. İkisi de özgür yerleşimlidir. Ayrıca: "Kapsayıcının Enabled'ı false olursa altındaki nesnelere ne olur?" → hepsi pasifleşir.
12
Ağır KonuHafta 12–13Zorluk: ★★★★★

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!

SinifOrnekleri.cs
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

Bilgiler.cs
// 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 static yazı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üzenleyiciSınıf İçiProje İçiAlt SınıfFarklı Assembly*
private✔✘✘✘
public✔✔✔✔
protected✔✘✔~
internal✔✘✘✔
protected internal✔✘✔✔
private protected✔✘✔✘
Sınavda Çıkar*Assembly tanımı aynen sorulabilir: "projenin tek bir .exe veya .dll dosyası içeren kısmıdır." Ezber kolaylığı: private = sadece kendi evi · public = her yer · protected = ben + çocuklarım (alt sınıf) · internal = ben + assembly.

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.

Yöntem 1 — El ile get-set
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();   // → 10
Yöntem 2 — C# property yazımı
public 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 → 10
Tuzak"set bloğunda atanan değer hangi anahtar kelimeyle alınır?" → value. 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:

FormGecis.cs
// 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 tipiBağımsız pencereDiyalog (modal)
Arkadaki kodÇalışmaya devam ederDURUR, kapanana dek bekler
Başka pencereye geçişSerbestEngellenir
Tuzak Üçlüsü1) 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!
02
Temel KonuHafta 2Zorluk: ★★☆☆

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

ÖzellikGörevi
NameKodda kullanılan isim — BENZERSİZ olmak ZORUNDA
TagTakma ad — benzersiz olmak zorunda DEĞİL
TextEkranda görünen yazı — kod kısmına etkisi YOK
Visible / EnabledGörünür mü? / Aktif mi?
Size / LocationBoyut (Width+Height) / Konum
AnchorBelirlenen kenarlara uzaklığı sabit tutar
DockKenara yaslar veya tüm alana yayar
LockedTaşıma/boyutlandırmayı kilitler
TabIndexTab tuşuyla odak sırası
Tuzak İkilileriName vs Tag: Name benzersiz zorunlu, Tag değil. Anchor vs Dock: Anchor mesafeyi korur, Dock kenara yapıştırır.

Kontroller ve Kritik Özellikleri

KontrolGöreviVarsayılan OlayÖne Çıkanlar
ButtonTemel etkileşimClickFlatStyle, UseMnemonic (& kısayolu), AutoEllipsis (… ekler)
LabelYazı göstermeClickBorderStyle, AutoSize
TextBoxVeri girişiTextChangedMultiline, PasswordChar, ReadOnly, ScrollBars, WordWrap, CharacterCasing
CheckBoxÇoklu seçimCheckedChangedChecked (2'li), CheckState (3'lü), ThreeState, AutoCheck
RadioButtonTekli seçimCheckedChanged(CheckBox benzeri)
ListBoxListe + seçimSelectedIndexChangedItems, Sorted, MultiColumn, SelectionMode, DataSource
PictureBoxResim göstermeClickSizeMode, ErrorImage (hata resmi), InitialImage (yüklenirken)
Sınavda ÇıkarChecked = 2 durum (true/false) · CheckState = 3 durum (ThreeState=true gerekir). TextBox'ta Lines'ın çalışması için Multiline=true şart. PasswordChar = kendi karakterin, UseSystemPasswordChar = sistemin şifre karakteri.
03
Temel KonuHafta 3Zorluk: ★★★☆

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

VeriTurleri.cs
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
Debugging Hammaddesi1) Büyük/küçük harf duyarlı: 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.

StringTuzagi.cs
Console.WriteLine(5 + 6 + "Sayı");   // → "11Sayı"  (önce sayılar toplanır)
Console.WriteLine("Sayı" + 5 + 6);   // → "Sayı56"  (metinden sonra hepsi metin!)
Sınavda ÇıkarBu iki satır neredeyse her sınavın çıktı sorusudur. Kural: + soldan sağa ilerler; metinle karşılaşınca her şey birleştirmeye dönüşür.

Tip Dönüşümleri (Type Casting)

YöntemNe zaman?Örnek
Bilinçsiz / Örtülü (implicit)Küçük → Büyük tür, otomatik, kayıpsızint 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");
ParseString → diğer türler. null gelirse HATA!int i=int.Parse("25");
TryParseHata kontrollü; bool döndürürbool ok=int.TryParse("25", out i);
Tuzak — TryParseBaşarılıysa → true + sonuç out değişkene yazılır. Başarısızsa → false + değişken 0 olur. "TryParse başarısız olursa değişkenin değeri ne olur?" → 0.
as / is Operatörleri (nesne dönüşümü)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.

Tuzak= ATAMA, == KARŞILAŞTIRMA! if (a = 5) derleme hatası verir.
04
Temel KonuHafta 4Zorluk: ★★★☆

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

Kiyasla.cs
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"); }
Sınavda Çıkar — Neden else if?Ayrı ayrı 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

SwitchCase.cs
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;
}
TuzakCase sonunda break; unutulursa derleme hatası. default bloğu opsiyoneldir; kullanılırsa case'lerin dışındaki tüm durumlarda çalışır.

Key (Klavye) Olayları

OlayNe zaman çalışır?Args türü
KeyDownTuşa basıldığı anKeyEventArgs
KeyUpTuştan el çekildiği anKeyEventArgs
KeyPressBasıldığında — karakter tuşlarında da çalışırKeyPressEventArgs
YöntemHangi olayda?Ne verir?
e.KeyCharKeyPressBasılan tuşu karakter olarak
e.KeyValueKeyDown / KeyUpTuşun ASCII değerini
e.KeyCodeKeyDown / KeyUpTuşun ismini
e.KeyDataKeyDown / KeyUpTuş + düzenleyici (Shift, Ctrl) bilgisi
En Kritik Tuzak — KeyPreviewFormun Key olaylarının çalışması için Form'un KeyPreview özelliği true olmalı! Kapalıysa, formda odaklanmış bir nesne varken tuşlara basıldığında formun Key olayları çalışmaz. Debugging sorusu favorisi.
EnumBir veri için numaralandırılmış sıralı ifadeler sunan yapı (Keys.A, Keys.Enter... birer enum üyesidir). Tanımı boşluk doldurma olarak gelebilir.
05
Temel KonuHafta 5Zorluk: ★★★☆

Döngüler

for / foreach / while / do-while + break & continue. Çıktı soruları ("bu döngü ne yazar?") buradan gelir.

For & Foreach

For.cs
// 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

While.cs
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!
whiledo-while
Şart kontrolüÖnceSonra
Minimum çalışma0 kezEN AZ 1 KEZ
TuzakŞart hep true kalırsa → SONSUZ DÖNGÜ, program kilitlenir. do-while'ın sonundaki ; unutulmamalı!

break & continue

BreakContinue.cs
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
}
Sınavda Çıkar"Bu döngünün çıktısı nedir?" tarzı soruda continue = atla, break = bitir mantığıyla adım adım izle. Yukarıdaki klasik örneğin cevabı: 1, 2, 4.
06
Temel KonuHafta 6Zorluk: ★★☆☆

Diziler & Listeler

Tek değişkende çok değer. İndeksin 0'dan başlaması ve Remove/RemoveAt farkı bu haftanın puan kapanları.

Diziler

Diziler.cs
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] → 3
Tuzak5 elemanlı dizinin son indeksi 4'tür! dizi[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).

KomutGö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
Tuzak — Remove vs RemoveAtRemove("Ali") DEĞERE göre siler; RemoveAt(2) İNDİSE göre siler. Sınavda mutlaka karıştırtmaya çalışırlar!
✍
Sınav SimülasyonuKlasik Soru Tipi

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."

Cozum1.cs
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."

Cozum2.cs
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."

Cozum3.cs
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."

Cozum4.cs
// 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."

Cozum5.cs
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."

Cozum6.cs
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)
🐞
Sınav SimülasyonuHata Bulma

Hata Avı (Debugging)

10 buggy kod. Önce hatayı kendin bul, sonra "Hatayı Göster"e bas. Sınavdaki debugging sorularının birebir provası.

⚡
Son Gece Modu5 dk'da tekrar

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"
  • IndexOf 0'dan sayar
  • TryParse başarısız → değişken 0
  • long → L, float → F harfi zorunlu

Form Geçiş 4'lüsü

  • new Form2(); f.Show(); → yeni açar (her seferinde!)
  • this.Hide(); → gizler, açık kalır
  • Application.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ışır
  • set { 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
Son SözÖnce Bölüm A'yı 2 tur, sonra Bölüm B'yi 1 tur çalış. Quiz'lerde %80+ alana kadar tekrarla. Sınavda önce kod yazma sorularına bak — şablonlar (metot, get-set, form geçişi, timer) ezberindeyse 10 dakikada yazarsın. 🍀 AA seninle olsun!
🎯
Soru BankasıGerçek Format100 Puan

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.

Nasıl ÇözülürSüreni tut: 40 dakika. Her doğru kısa soru 5p, klasik soru 25p. Sorular bankadan gerçek sınav diziliminde seçildi.
📝
Soru Bankası5'er Puan

Ç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.

⚖
Soru BankasıTuzak Avı

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.

✏
Soru BankasıKod + Çıktı

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ç.

💻
25 PuanKod ile Form

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.

Garanti Şablon — Her Nesne İçin 5 Adım (1) 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.