Zamanlı işlem yaptırma

(Not : Bu programı çalıştırabilmeniz için bir önceki yazıyı okumanız gerekir. !!!)

C#’da bir önceki alarm uygulamasını bir adım daha ileri götürerek girilen, istenilen zamanda; bilgisayarı kapatma, yeniden başlatma, oturum kapatma, hazırda bekletme veya mesaj veren uygulama haline getirelim. Ayrıca Csharp’da basit kontrollü alarm örneğinde uygulamadığımız ses dosyası çalmasını da ekleyelim.

Aynı veya yeni bir form üzerine önceki yazıda istenilen form parçaları ile birlikte 5 adet radiobuton, bir tane checkbox, sağ alt köşede girilen notu zamanında mesaj olarak, baloncuk halinde verebilmesi için bir adet notifyicon ve son olarak multiline özelliği aktif edilmiş textbox(textbox üzerine tıklayarak multiline özelliği aktif edebilirsiniz).

Kodlamaya geçmeden önce bir önceki örnekte uygulamada alarm sesi yoktu, ama bunda var. C#’da ses dosyası oynatabilmek için kodlama kısmındaki en üste bulunan kütüphanelere
using System.Media;
şeklinde ses namespace’i ekliyoruz.(Bu namespace eklenmez ise uygulamadaki ses dosyası çalışmaz program hata verir) Ses dosyasını program çalıştığı zaman her defasında import etmemesi için resimdeki gibi Solution Explorer‘den Properties dosyası altındaki Resources.resx sağ tıklayıp Open, ardından çıkan sayfada üst taraftaki Add Resource‘a tıklayıp ses dosyasını ekleyin.

Bunları yaptıktan sonra kodlamaya atlayabiliriz. Bir önceki uygulama üzerinden devam ettiğim için talarmkur timer’ına çift tıklayıp kodları alttaki gibi uygulayın

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
private void talarmkur_Tick(object sender, EventArgs e)
        {
            simdi = DateTime.Now;
             if (simdi.ToString() == alarmzamani.ToString())
            {

            if (bilgisayarikapat.Checked) //bilgisayarı kapat butonu seçili ise
            {
                System.Diagnostics.Process.Start("shutdown", "-s -f -t 0"); // bilgisayarı kapatma komutu
            }
            else if (oturumkapat.Checked)
            {
                System.Diagnostics.Process.Start("shutdown", "-l -f"); //oturumu kapatma kodları
            }
            else if (yenidenb.Checked)
            {
                System.Diagnostics.Process.Start("shutdown", "-r -f -t 0"); //bilgisayarı yeniden başlatmak için
            }
            else if (hazirda.Checked)
            {
                System.Diagnostics.Process.Start("shutdown", "-h -f"); // bilgisayarı hazırda beklet
            }

            else if (notyaz.Checked)
                            {
                                try //alarm sesi çalmasında olası hata için try catch denetimini ekledik
                                {
                                    SoundPlayer sp = new SoundPlayer(Properties.Resources.alarm_sesi); //alarm için değer oluşturuldu
                                    if (alarmcal.Checked)
                                    {
                                        sp.PlayLooping();
                                    }
                                }

                                catch
                                {
                                    MessageBox.Show("Ses dosyasında hata oluştu");
                                }
                string notd= notyeri.Text; // yazılan notu string değişkenine atadık
                notifyIcon1.BalloonTipTitle = "Bir Not Var !!!"; //sağ alt köşede çıkan baloncuk başlığı
                notifyIcon1.BalloonTipText = alarmzamani.ToString() + " Tarihindeki Zamanlanmış Notunuz : \n\n" + notd; // ayarlanan tarihi ve yazılan notu baloncukta gösterecek
                notifyIcon1.ShowBalloonTip(5000); //5 saniye balon not gözükecek
                     
            }

            else
            {
                MessageBox.Show("Beklenmedik bir hata oluşuverdi. \n Programı kapatıp tekrar deneyin!!!");

            }
            talarmkur.Enabled = false;

            }
        }

açıklamaları kod kısmında görebilirsiniz. Program çalıştığında sağ alt köşede baloncuk mesajını verebilmek için eklenen Notifyicon kontrolünün properties’den icon kısmından bir resim ikon ekleyin.

Alarm sesini durdurabilmek için ise, Durdur(btndurdur) butonuna şimdilik şunları yazmanız yeterli;

1
2
3
4
5
SoundPlayer sp = new SoundPlayer(Properties.Resources.alarm_sesi); //sesi durdurabilmek için tekrardan  aynı değeri oluşturduk
        private void btndurdur_Click(object sender, EventArgs e)
        {
            sp.Stop(); //sesi durdur
        }

Csharp’da basit kontrollü alarm

Bir önceki yazıda(Bugünün tarihi ve saati gösterme) uygulamasını biraz daha ileri götürerek; kullanıcın girdiği tarih ve saati kontrol edip eşitlendiğine alarm tarzı mesaj çıkaran uygulama ile merhaba.

Forma, resimdeki gibi bileşenleri ekleyelim. Bunlar; bugünün tarihi ve saati göstermek için 2 adet label ve bir tane timer nesnesi. Kullanıcıdan zaman verileri almak için; bir adet datetimepicker, 3 adet textbox, 2 adet buton ve alarmı kurmak için timer(formda bununla birlikte iki adet timer nesnesi oluyor).

Kod kısmına geçmeden önce başlıkta kontrollü yazmanın sebebini açıklayayım. Kontrollü, yani kullanıcın olası mantık ve giriş hatlarına karşı düzenlenmiş olduğu için yazdım. Örneğin kullanıcı eski bir tarihi girmiş olabilir, eski tarih girdiğinden dolayı alarm hiçbir zaman çalışmaz. Bundan dolayı kontrolleri ile yazmak istedim. Kod kısmında deneyerek ne demek istediğimi anlayacağınız umuyorum.

1
2
3
4
5
 private void saattarih_Tick(object sender, EventArgs e)
        {
            ltarih.Text = DateTime.Now.ToShortDateString();
            lzaman.Text = DateTime.Now.ToLongTimeString();
        }

Bugünün tarihi ve saati gösterme uygulamasında kileri burada tekrar yaptık.

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
            int saat = 0;
            int dakika = 0;
            int saniye = 0;
            private void btnayarla_Click(object sender, EventArgs e)
            {
                if (txtsaat.Text == "" | txtdakika.Text == "" | txtsaniye.Text == "") // Saat veya dakika veya saniye boş bırakılmayacak
                {
                    MessageBox.Show("Girilen değerleri kontrol et \n Alanlardan herhangi birini boş bırakma");
                    return;
                }

                try //uygulamanın olsaı hatada kitlenmemesi için try catch ile girilen değerleri kontrol ettik
                {
                    saat = Convert.ToInt32(txtsaat.Text);
                    dakika = Convert.ToInt32(txtdakika.Text);
                    saniye = Convert.ToInt32(txtsaniye.Text);

                }

                catch
                {
                    MessageBox.Show("Girilen değerleri kontrol et \n Alanlardan herhangi birini boş bırakma");
                }

                if (23 < saat | -1 > saat) // saati 23 ile -1 arasına değerlerin girmesi şartı sağladık
                {
                    MessageBox.Show("Doğru saati girin!!!");
                    return;
                }
                else if (59 < dakika | -1 > dakika) // dakikayı saat gibi aynı şekilde şartı sağlattırdık
                {
                    MessageBox.Show("Doğru dakikayı girin!!!");
                    return;
                }
                else if (59 < saniye | -1 > saniye) // saniyeyi saat gibi aynı şekilde şartı sağlattırdık
                {
                    MessageBox.Show("Doğru saniyeyi girin!!!");
                    return;
                }

                alarmayar(dateTimePicker1.Value.Date);
            }

Burada saat, dakika ve saniye kontrollerini gerçekleştirdik. Kullanıcı hatalarına karşı uyarı mesajları sağladık. Try catch ile int değer almak için hata denetimi yaptırdık.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        DateTime alarmzamani; //değişken tanımladık
        private void alarmayar(DateTime zaman) //alarm ayarı için metot kullandık
        {

            alarmzamani = zaman;  //saat dakika ve saniyeyi alarmzamani zaman değişkenine atıyoruz
            alarmzamani = alarmzamani.AddHours(saat);
            alarmzamani = alarmzamani.AddMinutes(dakika);
            alarmzamani = alarmzamani.AddSeconds(saniye);

            if (DateTime.Now > alarmzamani) //alarmı eski zamana kurdurma!
            {
                MessageBox.Show("Geçmiş zamana alarm kuramazsınız !!!");
                return;
            }

            talarmkur.Enabled = true; //alarm timer'ını aktif hale geitriyoruz
        }

Burada metot kullanarak girilen saat, dakika, saniyeyi alarmzamani değişkenine atayarak eski tarih girilmemesi için kontrol sağladık.

1
2
3
4
5
6
7
8
9
10
11
12
        DateTime simdi;
        private void talarmkur_Tick(object sender, EventArgs e)
        {
            simdi = DateTime.Now;


            if (simdi.ToString() == alarmzamani.ToString())
            {
                talarmkur.Enabled = false;
                MessageBox.Show("Alarm Zamanı");
            }
        }

Son olarak da alarm için eklediğimiz timer nesnemi de simdi zaman değişkeni atayarak girilen değer ile karşılaştırma yaptık. Timer 1 saniyede bir çalışacağı için her saniyede bu döngüyü kontrol edecek girilen zamana geldiğinde ise messagebox ile “Alarm Zamanı” mesajını verecek(ses dosyası ekleyerek zil sesi çaldıra bilirsiniz).

Gerekli açıklamaları kod içinde bulabilirsiniz. Daha fazlasına ihtiyacınız olursa yorum yazmanız yeterli…

Bugünün tarihi ve saati gösterme

C#’da bugünkü tarihi ve zamanı, saat dakika saniye cinsinden göstermek için kullanmamız gereken; 2 adet label ve bir tane timer.


Resimdeki gibi forma 2 tane label ve bir tane timer ekliyoruz. Uygulama çalıştığı anda gösterebilmesi için Timer’ın enable’nı true yapıyoruz. Ardından timer’a çift tıklayıp tick’ine alttaki gibi label’ları tarih ve zamana eşitliyoruz;

1
2
3
4
5
6
 private void saattarih_Tick(object sender, EventArgs e)
        {
            ltarih.Text = DateTime.Now.ToShortDateString();
            lzaman.Text = DateTime.Now.ToLongTimeString();
        }
    }

işlem bu kadar…

Formu titretme ve Opacity uygulaması

Csharp’da messengerdaki gibi form titretme, xp ilk açılış ekranı gibi formun yavaş yavaş görüntünün gelmesi uygulaması ile merhaba. Form titretme olayını this özelliğinden, formun sol ve üst değerini arttırıp azaltarak ufak yer değiştirme hareketleri ile göz yanıltması gibi oluşturabilirz. Formun soluktan yavaş yavaş açılmasını ise formun başlangıç(load kısımı) değerindeki Opacity‘sini 0 yapıp, belirli aralıklarla arttırarak yapabiliriz.

Yeni bir form açıp 1 buton ve 1 Timer nesnesi eklemeniz yeterli, kod kısımı ise;

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
private void Form1_Load(object sender, EventArgs e)
        {

//Opacity değeri başlangıçta 0 ve timer açık
            this.Opacity = 0;
            timer1.Enabled = true;
        }
        private void button1_Click(object sender, EventArgs e)
        {
// for kullanarak bir kaç saniye formu titreştiriyoruz. Sol ve üst kısmını 3'er arttırıp 3'er azaltıyoruz
            for (int i = 0; i < 200; i++)
            {
                this.Left += 3;
                this.Top += 3;
                this.Left -= 3;
                this.Top -= 3;
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
// Opacity değerini 0.10'ar  arttırarak formu yavaş yavaş görüntünün gelmesini sağlıyoruz
            this.Opacity += 0.10;
            if (this.Opacity == 1)
            {
                timer1.Enabled = false;
            }
        }

Olay bu kadar…

Timer ile ProgressBar yapımı

Bir kaç hamle ile progressbar’ı doldurmak isteyenlerin tam sayfası burası. Timer ile yapılan progressbar’ın ana mantığını kavrama babında küçük bir uygulama. Hemen örneğe geçecek olursak;

Form ekranına bir progressbar ve timer’ı ekleyip, timer’a çift tıklayıp kod kısmına geçin.

1
2
3
4
5
6
7
8
9
private void timer1_Tick(object sender, EventArgs e)
        {
            if (progressBar1.Value < 100)
            {
                progressBar1.Value += 10;
            }


        }

bunları kodladıktan sonra, form açılır açılmaz progressbar’ın çalışması için public Form1() blogu altına alttaki gibi timer1.Start(); ekleyin.

1
2
3
4
5
public Form1()
        {
            InitializeComponent();
            timer1.Start();
        }

sonra basın çalışsın. Burada progressBar1.Value += 10; 10’ar arttırarak bar dolmakta. İsteğe göre sayı yazılabilir. Uygulama for döngüsü ile de yapılabilir…

Kaynak : Cemal Can AKGÜL