4 Şub 2016

C#'ta Timer Kullanımı ve Klavyeden Basılan Tuş Kontrolü




Windows Form uygulaması yaparken Toolbox'ımızda gördüğümüz araçlardan biri de Timer'dır. Bu yazımda Timer hakkında kendi bilgilerimi paylaşacağım.





Öncelikle Toolbox'ımızdan Timer aracımızı alıp Form üzerine bırakıyoruz. Bu, textBox, label, button vs. gibi Form üzerinde bir görüntü oluşturmayacaktır. Çünkü Timer'ın bir şekli yoktur, zaten şekille de işi yoktur. Timer'ımızı aşağıdaki gibi formumuzun alt kısmında açılan çubukta göreceğiz. (Bir uygulamada birden fazla Timer kullanırsak bunları yanyana göreceğiz.)
Şimdi Timer'ı ne türlü işlerden kullandığımdan ve hangi event'lere sahip olduğundan bahsedeceğim.
Eğer bizim komutumuzla başlayıp, bizim komutumuzla bitecek ve sürekli tekrarlanmasını istediğimiz bir iş varsa bu timer kullanılarak programa yaptırılır.
Resimde de gördüğümüz gibi Timer'ın tek bir event'i vardır. Bu da Tick event'idir. Bu Tick event'inin içine Timer çalışırken olmasını istediğimiz kodları yazarız. Timer, start komutu ile başlatılır. Stop komutu ile durdurulur. Timer'ın property'lerine bakacak olursak Interval özelliğini görürüz. Interval milisaniye cinsinden değer alır ve Timer'ın kaç milisaniyede bir çalışması gerektiği burada belirtilir.
Timer bu süre boyunca sürekli çalışarak bizim tanımladığımız işi gerçekleştirir.

Şimdi örnek bir uygulama gerçekleştirelim. Form ekranımıza bir tane label atalım ve bu label'a adımızı yazalım. Klavyeden yön tuşlarına basarak bu label'ımızı yönlendirelim. Yukarı bastığımız zaman label durmadan yukarı çıksın ve sol, sağ, aşağı için de aynı. Elimizde bir label ve bir timer var. Biz klavyeden bastığımız tuş ile bir işlemin gerçekleşmesini istediğimiz için, Form1'in KeyDown event'ini kullanacağız. Bu eventi kullanırsak elimize klavyeden çekmeye gerek kalmadan hangi tuşa bastığımız program tarafından okunur.
private void Form1_KeyDown(object sender, KeyEventArgs e) 'da ki KeyEventArgs e yapısını kullanarak klavyeden hangi tuşa bastığımı kontrol edeceğim ve eğer yukarı bastıysam durum değişkenime 1, sağa bastıysam durum değişkenime 2 vs. atayacağım. Ardından timer'ın tick eventine giderek durum'un değerine göre iş yaptıracağım. Form1_Load'ın içinde timer'ın Interval değerini belirleyeceğim ve başlatacağım. Burada timer'ımızın Interval değeri hareket eden label'ımızın hızını arttıracak ya da azaltacaktır. Eğer klavyeden boşluk tuşuna basılırsa timer'ımız duracak dolayısıyla labelımızın hareketi de kesilecektir.
Programın kaynak kodları aşağıdadır. İsteyenler dosyayı buradan bilgisayarına indirebilir.
        int durum;
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Up)
                durum = 1;
            else if (e.KeyCode == Keys.Right)
                durum = 2;
            else if (e.KeyCode == Keys.Down)
                durum = 3;
            else if (e.KeyCode == Keys.Left)
                durum = 4;
            else if (e.KeyCode == Keys.Space)
                timer1.Stop();
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            switch (durum)
            {
                case 1: lblAd.Top--;
                    break;
                case 2: lblAd.Left++;
                    break;
                case 3:lblAd.Top++;
                    break;
                case 4: lblAd.Left--;
                    break;
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Interval = 10;
            timer1.Start();
        }

Hiç yorum yok:

Yorum Gönder