Bir Windows Form uygulaması geliştirmek, kullanıcı arayüzü etkileşiminden veritabanı güncellemelerine kadar bir dizi görevi içerebilir. Ancak, belirli aralıklarla tekrarlanması gereken işlemleri yönetmek ve uygulamanızın performansını artırmak için zamanı etkili bir şekilde kullanmak önemlidir. İşte tam da bu noktada C# programlama dilindeki Timer kontrolü devreye girer.
Bu makalede, Windows Form uygulamalarında C# Timer kontrolünün nasıl kullanılacağını adım adım öğrenerek, zamanla ilgili görevleri nasıl optimize edebileceğinizi keşfedeceksiniz. Timer kontrolünü eklemekten, olayları tanımlamaya ve işleyicileri kodlamaya kadar her adımı ele alarak, projelerinizde zaman yönetimini nasıl geliştirebileceğinizi anlatacağımız bu rehberle başlayalım.
Timer Kontrolünü Ekleme
İlk adım olarak, Windows Form projesine bir Timer kontrolü eklememiz gerekiyor. Bu kontrol, belirli bir süre aralığında bir olay tetikleyecektir. Aşağıdaki adımları takip ederek Timer kontrolünü ekleyebilirsiniz:
- Visual Studio’da, formunuzu tasarladığınız arayüzü açın.
- Toolbox’tan “Timer” kontrolünü bulun ve formunuza sürükleyip bırakarak ekleyin.
- Timer kontrolünü formun üzerinde istediğiniz konuma yerleştirin.

Timer Ayarları
Eklediğiniz Timer kontrolünü seçerek, özellikler penceresinden Timer’ın özelliklerini ayarlayabilirsiniz. Özellikle dikkate almanız gereken bazı önemli özellikler şunlardır:
- Interval: Timer’ın ne sıklıkla tetikleneceğini belirleyen bir özelliktir. Değer milisaniye cinsindendir, örneğin 1000 ms (1 saniye).
- Enabled: Bu özellik, Timer’ı etkinleştirmek veya devre dışı bırakmak için kullanılır. Timer etkinleştirildiğinde, belirlenen aralıklarla olay tetiklenir.

Timer’ı Başlatma ve Durdurma: Zamanı Kontrol Altına Alma
Windows Form uygulamalarında C# Timer kullanırken, zamanı kontrol etmek ve ihtiyaç duyduğunuz anlarda başlatmak veya durdurmak isteyebilirsiniz. Timer kontrolünün Start()
ve Stop()
metotları, bu ihtiyaca yönelik güçlü araçlardır.
Timer’ı Başlatma
Timer’ı başlatmak için, Start()
metodu kullanılır. Genellikle formun yüklenmesi veya belirli bir olayın gerçekleşmesi gibi bir noktada Timer’ı başlatmak istersiniz. Örneğin:
1 2 3 4 5 6 7 | private void Form1_Load(object sender, EventArgs e) { // Form yüklendiğinde Timer'ı başlat timer1.Start(); } |
Bu örnekte, Form1_Load
olayı içinde timer1.Start()
metodu kullanılarak Timer başlatılmaktadır.
Timer’ı Durdurma
Timer’ı durdurmak için, Stop()
metodu kullanılır. Örneğin, bir butona tıklama olayında veya belirli bir koşul gerçekleştiğinde Timer’ı durdurmak isteyebilirsiniz:
1 2 3 4 5 6 7 | private void btnStop_Click(object sender, EventArgs e) { // Bir butona tıklandığında Timer'ı durdur timer1.Stop(); } |
Bu örnekte, btnStop_Click
olayı içinde timer1.Stop()
metodu kullanılarak Timer durdurulmaktadır.
Timer Olayını Tanımlama
Timer kontrolünün tetiklediği olayları belirlemek için bir olay işleyicisi (event handler) tanımlamanız gerekecektir. Bu işlem için aşağıdaki adımları takip edebilirsiniz:
- Timer kontrolünü seçin ve özellikler penceresinden olaylar sekmesine geçin.
- “Tick” olayını bulun ve yanındaki boş alana çift tıklayarak bir olay işleyicisi oluşturun.
Oluşturulan olay işleyicisi, Timer’ın belirli aralıklarla tetiklendiğinde çağrılacak kodu içerecektir. Interval özelliği 1000(1sn) olarak ayarlandığını düşünürsek her bir saniyede bir tick olayı çalışacaktır.
Bu adımları takip ederek, Windows Form uygulamanızda Timer kullanımını başarıyla gerçekleştirebilirsiniz. Timer’ı istediğiniz aralıklarla tetikleyerek, arka planda çalışan işlemleri yönetmek için kullanabilirsiniz.
Şimdi basit örneklerle Timer kontrolünü daha detaylı inceleyelim.
Timer Örnekleri
Örnek 1: Her bir saniyede bir label üzerindeki sayıyı arttırın.

Bu işlemi gerçekleştirmek için forma bir tane Timer(timer1) ve bir tane de label(lblSayac) ekledik.
Ardından timer’ın Interval özelliğini 1000 olarak ayarladık.
Global olarak sayac değişkenini oluşturduk.
1 2 3 4 5 6 7 8 | public partial class Form1 : Form { private int sayac = 0; // Label üzerindeki sayıyı saklamak için değişken ...... |
Form_Load içinde timerı etkinleştirme.
1 2 3 4 5 6 | private void Form1_Load(object sender, EventArgs e) { timer1.Enabled = true; } |
Sonra timer üzerine çift tıklayarak timer1_Tick olayını oluşturduk.
1 2 3 4 5 6 7 8 | private void timer1_Tick(object sender, EventArgs e) { // Her bir saniyede bir burası çalışacak sayac++; lblSayac.Text = sayac.ToString(); } |
Tüm Kodlar:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Reflection.Emit; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Timer1 { public partial class Form1 : Form { private int sayac = 0; // Label üzerindeki sayıyı saklamak için değişken public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { timer1.Enabled = true; } private void timer1_Tick(object sender, EventArgs e) { // Her bir saniyede bir burası çalışacak sayac++; lblSayac.Text = sayac.ToString(); } } } |
Örnek 2: btnBaslat ve btnDurur butonları ile lblSayac içindeki sayacı başlatıp durdurma
Timerın interval değerini 1000 olarak ayarladıktan sonra ekrana başlatma ve durdurma için butonları ekliyoruz.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Reflection.Emit; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Timer1 { public partial class Form1 : Form { private int sayac = 0; // Label üzerindeki sayıyı saklamak için değişken public Form1() { InitializeComponent(); } private void timer1_Tick(object sender, EventArgs e) { // Her bir saniyede bir burası çalışacak sayac++; lblSayac.Text = sayac.ToString(); } private void btnBaslat_Click(object sender, EventArgs e) { timer1.Start(); } private void btnDurdur_Click(object sender, EventArgs e) { timer1.Stop(); } } } |
Kod:
sayac
değişkeni, Label üzerindeki sayıyı saklamak için kullanılır.timer1_Tick
metodu, Timer kontrolü tarafından belirli aralıklarla tetiklenen olaydır. Her tetiklendiğinde,sayac
artırılır velblSayac
adlı Label kontrolüne güncellenen değer yazılır.btnBaslat_Click
metodu, “Başlat” butonuna tıklandığında çağrılır ve Timer’ı başlatır.btnDurdur_Click
metodu, “Durdur” butonuna tıklandığında çağrılır ve Timer’ı durdurur.
Örnek 3: StopWatch ile timer kullanımı

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Reflection.Emit; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Timer1 { public partial class Form1 : Form { private Stopwatch stopwatch = new Stopwatch(); public Form1() { InitializeComponent(); } private void timer1_Tick(object sender, EventArgs e) { lblZaman.Text = stopwatch.Elapsed.ToString("hh\\:mm\\:ss"); } private void btnBaslat_Click(object sender, EventArgs e) { timer1.Start(); stopwatch.Start(); } private void btnDurdur_Click(object sender, EventArgs e) { timer1.Stop(); stopwatch.Stop(); } private void btnReset_Click(object sender, EventArgs e) { timer1.Stop(); stopwatch.Reset(); lblZaman.Text = "00:00:00"; } } } |
Yukarıda bulunan C# kod örneği, Windows Form uygulamalarında bir kronometre (stopwatch) uygulaması geliştirmek için temel bir şablona sahiptir. Aşağıda, bu örnekteki önemli kısımları adım adım açıklayarak, bir kronometre uygulamasını nasıl oluşturabileceğinizi inceleyelim.
1. Stopwatch Sınıfının Tanımlanması
1 2 3 | private Stopwatch stopwatch = new Stopwatch(); |
Kodun başında, System.Diagnostics
isim alanındaki Stopwatch
sınıfından bir örnek tanımlanmıştır. Bu örnek, geçen süreyi ölçmek için kullanılacaktır.
2. Timer Kontrolünün Kullanılması
1 2 3 4 5 6 | private void timer1_Tick(object sender, EventArgs e) { lblZaman.Text = stopwatch.Elapsed.ToString("hh\\:mm\\:ss"); } |
timer1_Tick
metodu, Timer kontrolü tarafından belirli aralıklarla tetiklenen bir olaydır. Bu olayın içinde, Stopwatch.Elapsed
özelliği kullanılarak geçen süre, “hh:mm:ss” formatında bir stringe dönüştürülüp, bir Label kontrolüne yazılır. Böylece, her tetiklendiğinde geçen süre güncellenir.
3. Başlat, Durdur ve Sıfırla Butonlarının İşlevselliği
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | private void btnBaslat_Click(object sender, EventArgs e) { timer1.Start(); stopwatch.Start(); } private void btnDurdur_Click(object sender, EventArgs e) { timer1.Stop(); stopwatch.Stop(); } private void btnReset_Click(object sender, EventArgs e) { timer1.Stop(); stopwatch.Reset(); lblZaman.Text = "00:00:00"; } |
“Başlat” butonuna tıklandığında, Timer ve Stopwatch başlatılır. “Durdur” butonuna tıklandığında ise, Timer ve Stopwatch durdurulur. “Sıfırla” butonu ise Timer’ı durdurup, Stopwatch’u sıfırlayarak ekrandaki süreyi “00:00:00” olarak ayarlar.
Bu adımlar, temelde bir kronometre uygulaması oluşturmak için gereken önemli adımları içermektedir. Kendi projenizde bu şablonun üzerine eklemeler yaparak, uygulamanızı daha da özelleştirebilirsiniz.
Örnek 4: Timer kullanarak bir geri sayım sayacı (countdown timer) örneği verilmiştir.

Yukarıdaki C# kod örneği, sadece Timer kontrolünü kullanarak basit bir geri sayım sayacı uygulamasını temsil eder. Aşağıda, bu örnekteki önemli kısımları adım adım açıklayarak, geri sayım sayacı oluşturmanın detaylarını inceleyeceğiz.
1. Geri Sayım Süresinin Belirlenmesi
1 2 3 | private int kalanZaman = 60; // Geri sayım süresi, saniye cinsinden |
Kodun başında, geri sayımın başlangıç süresi kalanZaman
adlı bir değişken ile belirlenir. Bu değişken, saniye cinsinden geri sayım süresini temsil eder. Örnekte, başlangıçta 60 saniye olarak ayarlanmıştır.
2. Timer Kontrolü İçindeki İşlev
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | private void timer1_Tick(object sender, EventArgs e) { if (kalanZaman > 0) { kalanZaman--; lblZaman.Text = kalanZaman.ToString(); } else { timer1.Stop(); MessageBox.Show("Geri sayım tamamlandı!"); } } |
timer1_Tick
metodu, Timer kontrolü tarafından belirli aralıklarla tetiklenen bir olaydır. Bu metot içinde, her tetiklendiğinde geri sayım süresi bir saniye azaltılır ve bu süre Label kontrolüne yazılır. Eğer geri sayım süresi sıfır olduğunda, Timer durdurulur ve bir bildirim penceresi ile kullanıcıya geri sayımın tamamlandığı bilgisi verilir.
3. “Başlat” ve “Durdur” Butonlarının İşlevselliği
1 2 3 4 5 6 7 8 9 10 11 | private void btnBaslat_Click(object sender, EventArgs e) { timer1.Start(); } private void btnDurdur_Click(object sender, EventArgs e) { timer1.Stop(); } |
“Başlat” butonuna tıklandığında, Timer başlatılır ve geri sayım işlemi başlar. “Durdur” butonu ise Timer’ı durdurarak geri sayımı askıya alır.
Bu adımlar, sadece Timer kontrolünü kullanarak bir geri sayım sayacı uygulamasını oluşturmanın temelini oluşturur. Bu basit örnekten yola çıkarak, kendi projenizde geri sayım sayacınızı daha karmaşık ve özelleştirilmiş hale getirebilirsiniz.
Örnek 5: Canlı Buton Yarışı
Eğlenceli bir örnekle programı bitirelim. Ekrana 4 tane buton ekleyip butonların üzerine görseller ekledik. Bu butonları yarışan canlılar olarak göstereceğiz. Örnekte 1 saniyede bir (burada timer devreye giriyor) 10px ve rastgele bir değerle ileri (x ekseninde left) gidecekler.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Reflection.Emit; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Timer1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void timer1_Tick(object sender, EventArgs e) { Random random = new Random(); button1.Left = button1.Left + 10 + random.Next(20); button2.Left = button2.Left + 10 + random.Next(20); button3.Left = button3.Left + 10 + random.Next(20); button4.Left = button4.Left + 10 + random.Next(20); } private void Form1_Load(object sender, EventArgs e) { timer1.Start(); } } } |
Yukarıdaki C# kod örneği, eğlenceli bir canlı buton yarışı oyununu temsil eder. Bu örnekte, form üzerine eklenmiş dört buton, yarışan canlıları simgeler. Her bir canlı, her saniyede bir belirli bir mesafede ve rastgele bir hızda ileri hareket eder.
1. Rastgele Sayı Üretimi
1 2 3 | Random random = new Random(); |
Kodun başında, her saniye butonların ilerleme mesafesine rastgele bir hız eklemek için Random
sınıfından bir örnek oluşturulmuştur.
2. Timer Kontrolünün Kullanımı
1 2 3 4 5 6 7 8 9 | private void timer1_Tick(object sender, EventArgs e) { button1.Left = button1.Left + 10 + random.Next(20); button2.Left = button2.Left + 10 + random.Next(20); button3.Left = button3.Left + 10 + random.Next(20); button4.Left = button4.Left + 10 + random.Next(20); } |
3. Oyunun Başlangıcı
1 2 3 4 5 6 | private void Form1_Load(object sender, EventArgs e) { timer1.Start(); } |
Form1_Load
metodu, form yüklendiğinde Timer’ı başlatır. Böylece oyun, form açıldığında otomatik olarak başlar.
Bu adımlar, eğlenceli bir canlı buton yarışı oyununu basit bir şekilde oluşturmanın temelini oluşturur. Butonların rastgele hızlarda ve aralıklarda ileri hareket etmeleri, kullanıcıya keyifli bir görsel deneyim sunar. Kendi projenizde bu temel şablonu kullanarak oyununuzu daha karmaşık hale getirebilir ve görsel tasarımları özelleştirebilirsiniz.
Örnek 6: Kazanan butonu belirleme(Örnek 5 devam)
Eğer metot kullanmayı biliyorsanız yukarıdaki kod belirli hedefe geldiğinde kazanan butonu göstermek için aşağıdaki gibi güncelleyebilirsiniz.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Reflection.Emit; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Timer1 { public partial class Form1 : Form { bool kazanan = false; int finishCizgisi = 600; public Form1() { InitializeComponent(); } private void Kazanan(Button winnerButton) { kazanan = true; timer1.Stop(); winnerButton.BackColor = Color.Green; // Kazanan butonun rengini değiştir MessageBox.Show($"Yarışı {winnerButton.Text} kazandı!"); } private void HareketEttir(Button button) { Random random = new Random(); if (!kazanan) { button.Left += 10 + random.Next(20); if (button.Left >= finishCizgisi) { Kazanan(button); } } } private void timer1_Tick(object sender, EventArgs e) { HareketEttir(button1); HareketEttir(button2); HareketEttir(button3); HareketEttir(button4); } private void Form1_Load(object sender, EventArgs e) { timer1.Start(); } } } |
Sonuç
Bu makalede, C# programlama dilinde Windows Form uygulamalarında Timer kontrolünün kullanımını öğrendik. Timer kontrolü, çeşitli senaryolarda zamanlı işlemler gerçekleştirmemize, animasyonlar oluşturmamıza ve etkileşimli uygulamalar geliştirmemize olanak tanır.
Yukarıdaki örnekler, Timer’ın pratik uygulamalarını göstererek, projelerinize dinamizm ve işlevsellik katmanıza yardımcı olacaktır. Timer kullanarak geri sayım sayacı, kronometre ve eğlenceli bir yarış oyunu örneğiyle, zaman yönetimi ve etkileşimli uygulama geliştirmenin keyfini çıkarabilirsiniz. İlerleyen projelerinizde, Timer’ı daha karmaşık senaryolarda nasıl kullanabileceğinizi keşfetmek için bu temel bilgileri kullanabilir ve uygulamalarınıza özgü çözümler geliştirebilirsiniz. Başarıyla zamanı yönetmek ve uygulamalarınızı daha etkileyici hale getirmek dileğiyle!
Yorum Yap