Windows Application etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Windows Application etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

7 Kasım 2009 Cumartesi

C# - Windows Application ; KacanButton

C# - Windows Application ; KacanButton


Tekrar merhaba. Bu uygulamamızda çeşitli nesnelerin özelliklerini, if yapısını, eğlenceli olduğunu düşündüğüm
bir uygulamada öğreneceğiz.

Hemen yeni bir Windows Form Application açıyorum, ismine 'blogKacanButton' diyorum.
Şimdi ilk olarak formumuzun border özelliğine bakalım. Bunun için; Form u seçip F4 ile onun özelliklerine gidiyoruz. Buradan FormBorderStyle (Font içinde) özelliğini "none" yapıp gözlemliyoruz. Evet gördüğünüz gibi üstteki title ve kapatma, küçültme düğmeleri kayboldu. Form'un özelliklerinde Layout kısmında StartPosition ise; Bize Form'un açıldığında nerede açılmasını istediğimizi verir. Bunada "CenterScreen" diyorum.

Ok. Uygulamamızın başlığı olarak bir Label düşünüyorum. Hemen Toolbox'tan yeni bir Label alıp ekliyorum. Label özelliklerinde AutoSize'ını "false" ve Dock özelliğini "top" ayarlıyorum. Dock özelliği, o nesnenin formun neresinde olacağını belirler. Normalde biz Label'ı çekip genişletip, yerini kendimizde verebilirdik. Dock bize bu kolaylığı sağlıyor.
Label'ımızın dock'unu top yaptıktan sonra rengi ve fontuyla oynayıp güzel bir başlık haline getiriyorum.

Form'unda BackColor özelliğini "Gray" yapıyorum. Button eklemek kaldı, hemen bir Button ekliyorum.
Button'un özelliklerinden; Text'ini "Tıkla",FlatStyle'ını "Flat" ve BackColor'ını Turuncu, FlatAppearance sekmesinden BorderSize'ını "2" olarak ayarlıyorum.



Design tamamdır. Burası kolay zaten.Şimdi geldik en zevkli kısma.
Kodlar:
Şimdi biraz düşünelim. Kod yazmaya nereden başlamalı, ihtiyaçlar neler? Karışımıza çıkacak problemler neler olabilir? Biz uygulama açılınca Button'un sürekli hareket halinde olmasını ve tıklanmasının zor olmasını istiyoruz öyle değilmi? Ozaman kod'u Form'un Load eventine yazarız ki form açıldığında çalışmaya başlasın. Fakat ozaman da sadece form açıldığında çalışır ve tekrarlanmaz öyle değilmi? Nereye yazmalı? Bizim tekrarlanan nesnemiz neydi, Timer. Ok ozaman Timer'ın "Tick" eventine yazmamız gerekir. Böylece her 1sn'de bir Timer tick olacak ve içindeki kodları çalıştıracak. Yani Button'un yerini değiştirecektir. Hemen bir Timer ekleyip enable'ını True yapıyorumki form açılır açılmaz başlasın saymaya. Interval'i de 1000 olsun (1sn). Timer'a çift tıklayıp kod tarafına geçiyorum.

Temel olarak bir nesnenin yerini nasıl değiştiririz sorusu var. Bir nesnenin Left ve Top özelliklerini değiştirerek yerini değiştirebiliriz. Bizimde bu uygulamada yapacağımız şey bu. Ama bu Left ve Top değerinin sürekli değişmesi gerekiyor öyle değilmi? O zaman Random nesnesini kullanacağız. Random'dan kendimize Left ve Top değerleri alıp bunu Button'umuza vereceğiz. Peki bu Button'un Left ve Top özelliğinin değişme sıklığı nasıl olacak? Yani düşünün bir kere değişip öylece kaldığını? Hiç işimize yaramaz öyle değilmi. Örnek mesela her 1sn'de bir yer değiştirse? Peki böyle tekrarlanan şeyler için ne kullanıyorduk? Daha öncede söylediğimiz gibi cevap "Timer". Evet yavaştan kafamızda oluşmaya başladı nasıl birşey olacağı. Buda bir programcı için iyi birşeydir. Önce zihninde oluşturur daha sonra dener ve karşılaştığın problemleri gidermeye çalışırsın.

Timer'ın enable'ını true yapıyorumki form açılır açılmaz başlasın saymaya. Interval'i de 1000 olsun (1sn)

Random nesnemi üretiyorum. 

    Random rnd = new Random();

Şimdi kordinatları üretme zamanı. Form'un genişliği 300px olduğunu düşünün. Ben eğer Button'un Left ine (yani soldan olan uzaklığına) 300 verirsem Button nerede olur? Dışarıda kalır öyle değilmi? Çünkü Button'unda bir genişliği var. Oda soldan başlar. Genişliğinin 15px olduğunu varsayarsak, benim maksimum Left' i 300 - 15 vermem gerekirki Button görünebilsin. Yani Button'un sağ köşesine göre hesap yapmam lazım.
Tamamdır Left parametremizi x, top parametremizi de y diye int bir değişkene atıyorum.

int x = rnd.Next(this.Width - button1.Width);
int y = rnd.Next(this.Height - (label1.Height + button1.Height));

ve Random nesnesi ile rastgele ürettiğim aralıkları Button'umuzun left ve top'ına veriyorum:

button1.Left = x;
button1.Top = y;

Dipnot: Uygulamanın kapatma tuşunu iptal ettiyseniz. Yani FormBorderStyle'ı "none" seçtiyseniz; Uygulamayı kapatmak için VS2008'e gelip üstteki sekmelerden Stop button'una basmanız yeterlidir.

Çalıştırıp gözlemliyorum. Hmm Label'ın içine giriyor Button öyle değilmi? Bir problem var. Demek ki "y" parametrem doğru çalışmıyor.
Biraz düşünelim şimdi. "y" neden üst'e girdi? Hmm ok başlangıç olarak "0" değerini alıyorda ondan. Random'un Next() metodunun 2 "Overload"u (2 farklı şekilde yazım yöntemi) vardır.
İlki; Next(sayi) girersiniz ve size 0 dan sayi'ya kadar rastgele rakamlar üretir.
İkinci yöntem ise; Başlangıç sayısı verebilirsiniz Ör) Next(0,10) bu ise size 0 ile 10 arası değerler getirir.

Dipnot: 0 dahildir ama 10 dahil değildir. yani 0 <= x < 10 gibi düşünebilirsiniz.

Ozaman hemen y parametremi modifiye ediyorum. Başlangıç değeri Label1'in yüksekliği (height) kadar ayarlıyorum.

int y = rnd.Next(label1.Height, this.Height - (label1.Height + button1.Height));

Çalıştırıp gözlemliyorum. Güzel fakat nasıl kapatılacak bu uygulama? Şöyle olsun mu: iki olasılık olsun,
1 - ESC tuşuna basıldığında uygulama kapansın
2 - Button'a tıklandığında mesaj versin ve uygulama kapansın.

- 2'yi hemen yapalım; Button'a çift tıklayıp kapatan kodu yazıyorum:

private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Tebrikler! Kazandın");
            this.Close();//button'a tıklarsa kapatsın
        }

- 1'e gelelim. Şimdi ESC tuşunu bilgisayara tanıtmamız lazım. Yani algılaması gerekir. Bunun için form'un özelliklerine F4 ile gidiyoruz. Oradan yukarıda sarı bir şimşek işareti var. Bu "Event" anlamına gelir. Ona basıp eventlerine geçiyoruz form'un. Key sekmesinde "KeyDown", "KeyPress", "KeyUp" gibi eventler var gördüğünüz gibi.

KeyUp : Bir tuşa basıp çektiğiniz anca çalışan eventtir.
KeyDown : ESC, Enter, Delete, Insert gibi tuşları algılamada kullanılan eventtir.
KeyPress : Buda "a,b" gibi klavye tuşlarını algılamada kullanılır.

Biz KeyDown'ı kullanacağız. Bunun için KeyDown'a çift tıklayarak kod tarafına geçiyoruz.



private void Form1_KeyDown(object sender, KeyEventArgs e)

Şimdi gördüğünüz gibi biz genellikle "EventArgs e" yi görürdük eventlerde öyle değilmi. Buradaki "KeyEventArgs e"; "e." yaparak yeni özellikleri, parametreleri kullanabilirsin demektir. Yani eğer eventte "EventArgs e" den farklı birşey yazıyorsa, her zaman "e." yaparak onun özelliklerini kullanabiliriz.

Bizde aynen "e." yaparak bakıyoruz özelliklerine. Gördüğünüz gibi bir sürü özellik geldi. Biz burda KeyCode'u kullanacağız. Gelelim kod'u yazmaya. Şimdi ne dedik? 'ESC'ye basınca' dedik öyle değilmi? Bu bir koşul cümlesi dikkatinizi çekerim. Koşulları kontrol ettirmek için çoğu program dilinde "if" yapısı kullanılır.

if de parantez içi Boolean tiptir. Yani geriye ya True yada False döndürür. Ör) if(sayi == 2) Bu örnekte sayi'nın 2 olup olmadığı kontrol ediliyor. Eğer sayı 2 ise True değil ise False geri dönüyor.

Dipnot : C#'ta bir eşitlik kontrol ettirmek isteniyorsa; Çift eşit (==) kullanılır.

Kendi örneğimize gelirsek.

if (e.KeyCode == Keys.Escape)
            {
                this.Close();
            }

Çalıştırıp gözlemleyelim. Çalışmıyor, sebebi herhangi bir key'i algılatmak istediğinizde, eğer form'un özelliklerinden "KeyPreview"i True yapmazsanız, bu kodların hiç birini algılatamazsınız. Ozaman True yapalım değilmi.

Tamamdır hallettik. Yalnız bir detay var, ki programcılık detay işidir. Space'e basınca Button'a basılmış olarak algılıyor ve kapatıyor. Bunu engellemek için bir if daha lazım. Hemen ekleyelim. Hatta MessageBox'ta mesaj yazalım Space'e basılınca:

else if (e.KeyCode == Keys.Space)
            {
                MessageBox.Show("Yemezler müdür!");
            }

Bir MessageBox'ta üstteki ne ekliyim daha güzel olsun. Çalıştırıp gözlemliyorum. Hmm bu biraz kolay olmuş değilmi? :) Zorlaştıralım. Timer'ın interval'ini 200 yaptım.

Güzel oldu gibi. Şimdilik benden bu kadar, tekrar görüşmek üzere.


KODLAR:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace blogKacanButton
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            Random rnd = new Random();//nesnemi ürettim
            int x = rnd.Next(this.Width - button1.Width);//genişlik değerimi ürettim
            int y = rnd.Next(label1.Height, this.Height - (label1.Height + button1.Height));//yükseklik değerimi ürettim
            button1.Left = x;//genişliği button'a atadım
            button1.Top = y;//yüksekliği button'a atadım
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Tebrikler! Kazandın");
            this.Close();//button'a tıklarsa kapatsın
        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Escape)//ESC e basılmış ise
            {
                MessageBox.Show("Görüşürüz Müdür");
                this.Close();//formu kapat
            }
            else if (e.KeyCode == Keys.Space)
            {
                MessageBox.Show("Yemezler müdür!");
            }
        }
    }
}

Link : KacanButton

22 Ekim 2009 Perşembe

C# - Yer değiştiren form ; Timer ve Random Kullanımı


Tekrar merhaba. Bugün güzel ve sık kullanılan kontrollerden biri olan Timer'ı ve daha sık kullanılan class'lardan biri olan Random'u inceleyeceğiz.
Timer'ın pek fazla özelliği yoktur. Kullanım amacı bir şeyi belirli aralıklarla tekrar yapmaktır. Örnek olarak bu Event tetikleme olabilir.
Timer'ın en çok kullanılan yönü "tick event"dir. Tick Event'i verilmiş bir zaman aralığında (ki bunuda Interval ile yapıyoruz) Event'inin içinde bulunan kodları çalıştırır.

Örnek uygulama olarak gelin belirli bir zaman aralığında, mesela her 3sn de bir yer değiştiren bir form uygulaması yapalım. Hatta form'un bir saat göstergesi de olsun.

Ok hemen yeni bir Windows Form uygulaması açıp ismine timerSaat diyorum. Kolay olandan başlayalım önce saati göstereceğimiz bir yer olmalı öyle değilmi? Hemen bir Label koyuyoruz forma. Label'ın AutoSize'ını kapatıp (false), boyutları ve Font'uyla oynuyorum (süsliyim biraz). Label'ın ve Form'un BackColor özelliğini Siyah seçtim. Gelin birde Form'un Border'ını kapatalım (yani başlığı olmasın). Bunu yapmak için Form a tıklayıp F4 ile özelliklerine gidip buradan FormBorderStyle'ı "None" yapıyorum. Evet hep başlık olucak değil ya.
Güzel olduda bu seferde kapatmada sıkıntı vericek böyle olursa. Ozaman bir Button koyar bu işide hallederiz. Button'un da Text'ine "Kapat" dedik mi dadından yenmez.

Süslemeye devam. Form'a bir Label daha ekleyelim, form'un yer değiştirme olayı ile ilgili bilgi verici bir kaç kelam ederiz.
Fark etmişsinizdir, eklediğim label siyah renkte yazıldığı için görülemiyor. Rengini değiştirmek için özelliklerine gelip ForeColor (yani text rengi) özelliğini (güzel bir renktir severim) "Maroon" yapalım. Font'unu da "Verdana" ve boyutunu 14 yaptım.


(tabii ben bu screenshot'ı aldığım da faz geçip font'u verdana, boyutu 12 yapmıştım)

label2'nin textini açıklayıcı bilgileri yazalım; "Bu Form 3sn aralıklarla yer değiştirecektir! Duyurulur". Gördüğünüz gibi AutoSize'ını false yapmadığımız için sağa doğru ilerledi ve formdan dışarı çıktı. İşte AutoSize ı nasıl kullanmak gerektiğinin güzel bir örneği. Hemen AutoSize ı false yapıp, güzelce yerleştiriyoruz form'a.

Saat'in de (label1) rengi biraz mat mı oldu ne? Sanki oldu gibi. Red yapayım onu ben. Siz istediğiniz gibi takılın tabiki. Hatta baştan vereyim renkleri iyisimi.

Eveet herşey tamamda Timer'lar nerde dimi? Ok ToolBox'a gelip Components sekmesinden (aşağılara doğru) Timer'ı bulup form'umuza ekliyoruz. Gördüğünüz gibi Timer'ın form üzerinde bir görünümü yok. Sadece altta çalışan bir özelliktir. Alttan timer1'i seçip F4 ile özelliklerine bakalım biraz. Burada Timer'ın iki önemli özelliği var. Biri "Enable" diğeri ise "Interval" özelliğidir.

1 - Enable özelliği; Uygulamanın başlar başlamaz (yani çalıştığında) timer'ın aktif hale gelmesini ayarlar. Yani Enable'ı True yaparsak Form çalışır çalışmaz timer saymaya başlar. False yapılacak durumlarda; Timer'ın sizin istediğiniz anda başlamasını istiyorsanız Enable'ını False seçersiniz. Ör) Saat 20:00'da çalışsın gibi..

2 - Interval özelliği; Timer'ın çalışma sıklığını belirler. Yani Timer "tick event"ini hangi sıklıkla (saniye,milisaniye) gerçekleştirsin. Örnek olarak Interval'i 1000 olan bir timer; her 1sn de bir çalışır. (1000ms = 1sn)

Not : Timer'ın ilk "tick event" i sadece ilk çalıştığında olmak üzere Interval süresi kadar gecikir.

Ok amacımızı unutmayalım. Hem saati göstereceğiz, hem de form kendini 3sn de bir yer değiştirticek. Hmm düşünme zamanı; Sanırım buldum bize iki timer lazım. Bir tanesi saat için; Her bir saniye de bir çalışıp ekrana o anki saati yazdıracak. Ve diğeri; form'un üç saniyede bir yer değiştirmesi için.
Tamamdır ilk eklediğimiz timer1 in Interval'ini 1000, Enable'ını true, şimdi ekleyeceğimiz timer2'ın Interval'ini 3000 ve Enable'ını True yapıyoruz.



Hadi artık kod yazmaya başlayalım.Kapat Button'unu aradan çıkaralım. Button'a çift tıklayıp kodunu yazıyoruz:

private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

this : O an üzerinde olduğun Class'ı temsil eder. İleri de Class mantığına değineceğiz. Bizim için "this" = "form" şuan da. this.Close() ; Bu form'u kapat anlamına gelir. Button'a tıklandığında form kapanacak.

Saat'i yazmak için tabiki timer1'e çift tıklayıp; "timer1"in tick event'ine geliyoruz. Ve oraya şu kodları yazıyoruz. (daha önce göstermiştim; bkz: Basit Saat Uygulaması)

private void timer1_Tick(object sender, EventArgs e)
        {
            label1.Text = DateTime.Now.ToLongTimeString();
        }

Şimdi çalıştırıp test edelim. İlk çalıştığında "label1" yazıyor değilmi saatin yerinde :) Evet bunun sebebi; Yukarda bahsettiğim Timer'ın Interval değeri kadar gecikmesidir. Düzeltmek için Form'a çift tıklayıp Form'un Load'u na timer1 de bulunan kodları yazıyoruz. Böylelikle form yüklendiğinde de (yani ilk açıldığında) saat'i göstersin.

Tamamdır. Sıra geldi yer değiştirmeye; Bunun için timer2'ye çift tıklayıp tick event'ine gidiyoruz.Şimdi her 3sn de bir ne olmasını bekliyorduk? Yer değiştirmesini değilmi. Peki bunu nasıl yapar sizce? Şöyle söyliyeyim. Ekranda bulunan herşeyin bir Kordinat'ı vardır aslında bilgisayarda. Neyin nerede olduğunu sürekli saklar ve günceller. İşte biz bunu değiştirerek istediği yerlere gitmesini (tabi belirli sınırlar dahilinde) sağlayacağız. Ve tabi bu değer sürekli değişmeli. Yani sabit kalırsa hep aynı yerinde kalmaz mı? Bu tür durumlar için C#'ta Random class'ını kullanırız. Yalnız Random bir class olduğundan yeni bir kopyası üretilmeden özellikleri kullanılamaz.

Şimdi ilk başta bir Random kullanılmak isteniyorsa kopyalanmalıdır demiştik. Aynen şunları yazıyorum: Random rastgele = new Random();
rastgele nesnemi " . " ile çağırarak özelliklerini artık kullanabilirim.
VS size zaten yardımcı olacaktır yazarken (IntelliSense).


Şimdi bir x sayısı tanımlayalım ve bu x sayısını rastgele sayılar üretsin. Ve timer2 nin içinde olsun ki her 3sn bir bu rastgele üretme işlemi gerçekleşsin.

int x = rastgele.Next(Screen.PrimaryScreen.WorkingArea.Width - this.Width);

random üretmek için kopyaladığımız rastgele yi çağırır ve onun "Next" özelliğini kullanırız. Next özelliği; ( ) Parantezleri arasına aldığı değer aralığında rastgele pozitif sayılar üretir. Ör) Next(50) mesela, 1,5,49,30 gibi sayılar üretebilir. Fakat Next tek başına çalışmaz. Mutlaka onun çağırdığı bir kopyalanmış Random nesnesi olmalı. Bizim nesnemiz  burada "rastgele".

Screen.PrimaryScreen.WorkingArea; ise o an ekranda çalışılan alanı tanımlar. Eğer biz ekranın genişliğinden (width) kendi form'umuzun genişliğini çıkarırsak geriye bizim form'umuzun ekranın dışına çıkmadan rahatça sağ sol yapabileceği bir alan oluşur. Bunuda random lar ve form'un left ine verirsek iş tamamdır.

Peki nasıl atayacağız bu değeri? "this.left" ve "this.top" bunlar bize form'u (yani this'i) yer değiştirmemizi sağlayacak özellikleridir.

Örneğin: this.left = 10; yapın ve çalıştırıp gözlemleyin.
veya
       this.top = 200; yapıp gözlemleyin. Daha iyi anlayacaksınızdır.
Ama ben bu top ve left özelliklerini sürekli değişik değer gelmesini istiyordum öyle değilmi? Çünkü her timer2 "tick" olduğunda (yani 3sn de bir) yeni bir this ve top değerinin form'un yerini değiştirmesini istiyorum


this.Left = x;

Aynı şekilde yükseklik (y ekseni) için de yapıyorum.

int y = rastgele.Next(Screen.PrimaryScreen.WorkingArea.Height - this.Height);

Önce bir rastgele y sayısı üretim bunu form'un yukarıdan olan uzaklığı olarak atıyorum.

this.Top = y;

Yalnız burada Width değil Height kullanıyoruz (yükseklik ayarı için) unutmayın.

Çalıştırıp gözlemliyoruz. Unutmayın ilk tick interval süresinden sonra çalışır (yani 3sn sonra tetiklenir).

Şimdilik bukadar. Tekrar görüşmek üzere...

KODLAR:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace blogTimerSaat
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            label1.Text = DateTime.Now.ToLongTimeString();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = DateTime.Now.ToLongTimeString();
        }

        private void timer2_Tick(object sender, EventArgs e)
        {
            Random rastgele = new Random();
            int x = rastgele.Next(Screen.PrimaryScreen.WorkingArea.Width - this.Width);
            this.Left = x;
            int y = rastgele.Next(Screen.PrimaryScreen.WorkingArea.Height - this.Height);
            this.Top = y;
        }
    }
}

Link : blogTimerSaat

5 Ekim 2009 Pazartesi

C# - Windows Application ; Basit Saat Uygulaması

Tekrar merhaba uzun zamandır fırsat bulup birşeyler ekleyemedim. Şimdi fırsat bulmuşken çeneyi bırakıp direk işimize bakalım .)

Basit Saat Uygulaması



Her uygulamada olabileceği gibi bir saat yapalım kendimize..

Ok başlıyoruz. Visual Studio'yu açıp (veya Ctrl + R yapıp çalıştır'a "devenv" de yazabiliriz) hemen Ctrl + N yapıp yeni bir Windows Form Application açıyoruz. İsminede siz karan verin artık
Şimdi saat uygulamasının mantığı şöyle çalışır; Her 1000milisaniye yada 1sn de bir ekrana o an Windows'un saat'ini yazdırırsınız. Böylece sanki saat ilerliyormuş gibi görünür.

Saatimizi bir Label gösterelim. Ozaman hemen Toolbox'tan bir Label'ı alıp form'umuza koyuyoruz.Label ilk eklendiğinde AutoSize'ı "True" gelir.F4'e basıp, o Control'un özellikler kısmına geçip AutoSize'ını "False" yapıyoruz ki boyutuyla oynayabilelim. Şimdi biraz kenarından çekin uzatın büyütün, saatimiz büyük olsun .)
Font kısmından istediğiniz yazı tipini arka plan rengini ayarlayabilirsiniz. Yine Özelliklerde TextAlign özelliği; Label'ın içindeki Text'in nerede duracağını bize söyler. Bunuda TopLeft'ten MiddleCenter yapıyoruz. (Ortada dursun, akıllı olsun)


Ok design kısmını hallettik. Şimdi geldi sıra kod yazmaya. Peki bu kod diğer örneklerdeki gibi Button'la tetiklenmiyor, peki nasıl tetiklenecek? nereye tıklayacağız kod yazmak için?
Ne demiştik başta saatin çalışma mantığına; Her 1 saniyede bir ekrana o an ki saati yazacak değil mi? Ok ozaman böyle bir şeyi hangi Controlle yaparız? Cevap basit Timer. Hemen ToolBox'ın Components sekmesinden en altta Timer'ı form'umuza ekliyoruz. Timer'da Label gibi ilk eklendiğinde belli bazı değerleri kendi otomatikman alır. Bunları görmek için F4'e basabiliriz. Burada en önemli kısım Enable ve Interval kısmıdır. Enable'ın "True" olması Timer'ın uygulama başlayınca hemen başlaması anlamına gelir. Bazı durumlarda False istediğimiz zamanda başlamasını sağlayabiliriz. Interval kısmı ise; Timer'ın hangi süre aralığında Event'ini (yani olayını Tick Event'ini) gerçekleştireceğini ayarlamamıza yarar.
Enable'ı "True" ve Interval'i "1000" (yani 1sn, interval'in birimi milisaniyedir) yapıyoruz.

Peki bir soru daha.Uygulama hangi Event'le (Olay'la) çalışıyor. Yani yazılan kod'un gerçekleşeceği event hangisi? Cevap yine Timer. Timer her 1sn de bir kendi Event'ini gerçekleştirecek.Bu yüzden kod tarafına geçmek için timer'a çift tıklıyoruz. Ok sonunda kod tarafı :)

Eveet şimdi gördüğünüz gibi timer1_tick event'i karşımıza geldi. Bunun mantığı şudur. timer1 her 1sn de bir bizim yazdığımız kodları gerçekleştirecek. Ozaman yazalım

label1.Text = DateTime.Now.ToLongTimeString();

DateTime C#'ta tarih, saat gibi parametrelerle çalışılırken kullanılır. Buradaki "Now" kısmı, şimdiki saati ver anlamına gelir. Ve "ToLongTimeString()" kısmı ise formatını belirler.

Tamam çalıştırıp görelim bakalım ne olmuş? Ctrl + Shift + B yapıp Build ettikten sonra F5'e basıp çalıştırıyoruz.

Evet çalıştı... Ama ilk geldiğinde hala saati yazmamış label'ın adını yazmıştı öyle değil mi? Bunun sebebi basit, Timer Control'ü ilk çalıştığında daima kendi Interval süresi kadar gecikir. Yani ilk tick (ilk çalışma) 1sn sonra gelir. Bu durumu düzeltmek için Form'un ilk açıldığı ana aynı kod'u tekrar yazabiliriz. Bunun için form'umuzun boş bir yerine çift tıklayarak (veya form'un F4 ile özellikler penceresinden Event sekmesine (Yukarıda sağda, şimşek şeklinde bir ikonu var) Load kısmına çift tıklayarak) kod tarafına geçiyoruz ve timer'ın kodlarını orayada yazıyoruz. Böylelikle Uygulama ilk açıldığında hemen saati gösterecektir.



Evet nur topu gibi bir saatimiz oldu... Görüşmek üzere.

KOD:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace blogSaat
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            label1.Text = DateTime.Now.ToLongTimeString();
        }

       
    }
}