26 Ağustos 2012 Pazar

C# ile NotifyIcon

Merhaba değerli Webkolog.net takipçileri, bugünkü yazımızda C# .NET Framework 4 ile Windows Forms uygulamalarımızda sıkça kullandığımız ve uygulamaların arka planda çalışırken kullanıcıya bildirimler göstermesini sağlayan NotifyIcon kontrolünü yakından inceleyeceğiz. NotifyIcon, özellikle sistem tepsisinde (system tray) bir ikon görüntüleyerek kullanıcılara uygulamanın durumu hakkında bilgi vermemizi veya hızlı erişim seçenekleri sunmamızı sağlar. Gelin, NotifyIcon'ın temel özelliklerini, metotlarını ve olaylarını birlikte keşfedelim.

NotifyIcon Kontrolü Nedir?

NotifyIcon kontrolü, Windows Forms uygulamalarında sistem tepsisinde (saatin yanında, bildirim alanında) bir ikon görüntülemenizi sağlar. Bu ikon aracılığıyla kullanıcıya uygulama durumu hakkında bilgi verebilir, balon ipuçları (balloon tips) gösterebilir veya sağ tıklama menüsü (context menu) ile hızlı erişim seçenekleri sunabilirsiniz. NotifyIcon, görsel bir kontrol değildir; formun tasarımcı görünümüne eklenen bir bileşendir.

NotifyIcon Kontrolünün Temel Özellikleri ve Metotları

NotifyIcon bileşeni, sistem tepsisindeki ikonun davranışını ve görünümünü özelleştirmek için çeşitli özelliklere sahiptir:

  • Icon: Sistem tepsisinde görüntülenecek ikonu alır veya ayarlar. Bu, genellikle bir .ico uzantılı dosya olmalıdır.
  • Text: Fare imleci ikonun üzerine geldiğinde görünen ipucu metnini (tooltip) alır veya ayarlar.
  • Visible: İkonun sistem tepsisinde görünüp görünmediğini belirler (true ise görünür, false ise gizli). Uygulama başlatıldığında veya kapatıldığında bu özelliği ayarlamak önemlidir.
  • ContextMenuStrip: İkona sağ tıklandığında açılacak olan bağlam menüsünü (context menu) alır veya ayarlar. Bu, kullanıcıya hızlı eylem seçenekleri sunmak için kullanılır.
  • ShowBalloonTip(int timeout, string tipTitle, string tipText, ToolTipIcon tipIcon): Sistem tepsisinde bir balon ipucu (bildirim) görüntüler.
    • timeout: Balon ipucunun ekranda kalacağı süre (milisaniye cinsinden).
    • tipTitle: Balon ipucunun başlığı.
    • tipText: Balon ipucunun ana metni.
    • tipIcon: Balon ipucunda görüntülenecek simge (None, Info, Warning, Error).

NotifyIcon Kontrolünün Temel Olayları

NotifyIcon, kullanıcı etkileşimlerine ve balon ipucu durum değişikliklerine tepki vermek için çeşitli olaylar sunar:

  • Click: İkona sol tıklandığında tetiklenir.
  • DoubleClick: İkona çift tıklandığında tetiklenir. Genellikle uygulamayı geri yüklemek veya ana pencereyi göstermek için kullanılır.
  • BalloonTipClicked: Balon ipucuna tıklandığında tetiklenir.
  • BalloonTipClosed: Balon ipucu kapandığında tetiklenir (zaman aşımı veya kullanıcı tarafından kapatılma).
  • BalloonTipShown: Balon ipucu görüntülendiğinde tetiklenir.

NotifyIcon Kullanım Senaryoları

1. Basit Bir Bildirim İkonu Oluşturma

Bu örnekte, sistem tepsisinde bir ikon görüntüleyeceğiz ve fare üzerine gelindiğinde bir ipucu metni göstereceğiz.

using System;
using System.Windows.Forms;
using System.Drawing; // Icon için

public partial class Form1 : Form
{
    private NotifyIcon notifyIcon1; // Tasarımcıda eklenen NotifyIcon bileşeni

    public Form1()
    {
        InitializeComponent();

        // NotifyIcon bileşenini oluştur (eğer tasarımcıda eklemediyseniz)
        notifyIcon1 = new NotifyIcon();

        // Sistem tepsisinde görüntülenecek ikonu ayarla
        // Uygulamanızın projesine bir .ico dosyası ekleyip Resources'tan alabilirsiniz.
        // Örneğin: Properties.Resources.MyIcon;
        // Veya doğrudan bir dosyadan yükleyebilirsiniz:
        try
        {
            notifyIcon1.Icon = new Icon(Application.StartupPath + "\\appicon.ico"); // Kendi ikon dosyanızın yolunu belirtin
        }
        catch (Exception ex)
        {
            MessageBox.Show("İkon yüklenirken hata oluştu: " + ex.Message, "Hata");
            // Varsayılan bir ikon kullanabiliriz veya uygulamadan çıkabiliriz
            notifyIcon1.Icon = SystemIcons.Application; // Varsayılan uygulama ikonu
        }
        
        // İkonun üzerine gelindiğinde görünecek metni ayarla
        notifyIcon1.Text = "Webkolog.net Uygulaması";

        // İkonu görünür yap
        notifyIcon1.Visible = true;

        // İkona çift tıklandığında Form1'i gösterme olayını bağla
        this.notifyIcon1.DoubleClick += new EventHandler(notifyIcon1_DoubleClick);

        // Form kapatıldığında ikonu gizle ve dispose et
        this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
    }

    // İkona çift tıklandığında formu göster
    private void notifyIcon1_DoubleClick(object sender, EventArgs e)
    {
        this.Show(); // Formu göster
        this.WindowState = FormWindowState.Normal; // Formu normal boyuta getir
        this.Activate(); // Formu aktif yap
    }

    // Form kapatılırken NotifyIcon'ı gizle ve kaynaklarını serbest bırak
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        notifyIcon1.Visible = false; // İkonu gizle
        notifyIcon1.Dispose(); // Kaynakları serbest bırak
    }
}
2. Balon İpuçları (Bildirimler) Gösterme

ShowBalloonTip metodu ile kullanıcılara anlık bildirimler gönderebiliriz.

using System;
using System.Windows.Forms;
using System.Drawing;

public partial class Form1 : Form
{
    private NotifyIcon notifyIcon1;

    public Form1()
    {
        InitializeComponent();
        notifyIcon1 = new NotifyIcon();
        notifyIcon1.Icon = SystemIcons.Information; // Bilgi ikonu
        notifyIcon1.Text = "Bildirim Uygulaması";
        notifyIcon1.Visible = true;

        // Balon ipucu olaylarını bağla
        this.notifyIcon1.BalloonTipClicked += new EventHandler(notifyIcon1_BalloonTipClicked);
        this.notifyIcon1.BalloonTipClosed += new EventHandler(notifyIcon1_BalloonTipClosed);
        this.notifyIcon1.BalloonTipShown += new EventHandler(notifyIcon1_BalloonTipShown);

        // Form üzerinde bir buton (buttonShowNotification) olduğunu varsayalım
        this.buttonShowNotification.Click += new EventHandler(buttonShowNotification_Click);
    }

    private void buttonShowNotification_Click(object sender, EventArgs e)
    {
        // 3 saniye (3000 ms) boyunca görünecek bir balon ipucu göster
        notifyIcon1.ShowBalloonTip(3000, "Yeni Mesaj", "Webkolog.net'ten yeni bir bildiriminiz var!", ToolTipIcon.Info);
    }

    private void notifyIcon1_BalloonTipShown(object sender, EventArgs e)
    {
        Console.WriteLine("Balon ipucu gösterildi.");
    }

    private void notifyIcon1_BalloonTipClicked(object sender, EventArgs e)
    {
        MessageBox.Show("Balon ipucuna tıklandı!");
        // Burada ilgili mesajın veya uygulamanın açılması gibi bir işlem yapılabilir
    }

    private void notifyIcon1_BalloonTipClosed(object sender, EventArgs e)
    {
        Console.WriteLine("Balon ipucu kapatıldı.");
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        notifyIcon1.Visible = false;
        notifyIcon1.Dispose();
    }
}
3. Bağlam Menüsü (Context Menu) Ekleme

İkona sağ tıklandığında bir menü göstermek için ContextMenuStrip bileşenini kullanırız.

using System;
using System.Windows.Forms;
using System.Drawing;

public partial class Form1 : Form
{
    private NotifyIcon notifyIcon1;
    private ContextMenuStrip contextMenuStrip1; // Tasarımcıda eklenen ContextMenuStrip

    public Form1()
    {
        InitializeComponent();
        notifyIcon1 = new NotifyIcon();
        notifyIcon1.Icon = SystemIcons.Question; // Soru ikonu
        notifyIcon1.Text = "Menülü Uygulama";
        notifyIcon1.Visible = true;

        // ContextMenuStrip'i oluştur ve menü öğelerini ekle (tasarımcıdan da yapılabilir)
        contextMenuStrip1 = new ContextMenuStrip();
        ToolStripMenuItem itemAc = new ToolStripMenuItem("Aç");
        ToolStripMenuItem itemKapat = new ToolStripMenuItem("Kapat");
        ToolStripMenuItem itemHakkinda = new ToolStripMenuItem("Hakkında");

        contextMenuStrip1.Items.Add(itemAc);
        contextMenuStrip1.Items.Add(itemHakkinda);
        contextMenuStrip1.Items.Add(new ToolStripSeparator()); // Ayırıcı
        contextMenuStrip1.Items.Add(itemKapat);

        // Menü öğelerinin Click olaylarını bağla
        itemAc.Click += (s, e) => { this.Show(); this.WindowState = FormWindowState.Normal; this.Activate(); };
        itemKapat.Click += (s, e) => { Application.Exit(); }; // Uygulamayı kapat
        itemHakkinda.Click += (s, e) => { MessageBox.Show("Bu uygulama Webkolog.net için yazılmıştır.", "Hakkında"); };

        // NotifyIcon'a bağlam menüsünü ata
        notifyIcon1.ContextMenuStrip = contextMenuStrip1;

        this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        // Eğer kullanıcı kapatma butonundan kapatıyorsa, ikonu gizle ve dispose et
        if (e.CloseReason == CloseReason.UserClosing)
        {
            e.Cancel = true; // Formu kapatmayı iptal et
            this.Hide(); // Formu gizle
            notifyIcon1.ShowBalloonTip(1000, "Uygulama Arka Planda", "Uygulama sistem tepsisinde çalışmaya devam ediyor.", ToolTipIcon.Info);
        }
        else
        {
            // Diğer kapatma nedenlerinde (örneğin Application.Exit()) ikonu dispose et
            notifyIcon1.Visible = false;
            notifyIcon1.Dispose();
        }
    }
}

Dikkat Edilmesi Gerekenler

  • İkon Dosyası: NotifyIcon için mutlaka bir .ico uzantılı ikon dosyası kullanmalısınız. Diğer resim formatları (PNG, JPG) düzgün çalışmayabilir veya hata verebilir.
  • Kaynak Yönetimi: Uygulamanız kapatılırken NotifyIcon nesnesinin Dispose() metodunu çağırmayı unutmayın. Aksi takdirde, ikon sistem tepsisinde kalmaya devam edebilir veya bellek sızıntılarına neden olabilir. Genellikle FormClosing olayında veya uygulamanın kapanış noktasında bu işlem yapılır.
  • Form Gizleme/Gösterim: Uygulamanızın ana formunu kapatmak yerine gizleyerek (this.Hide()) ve NotifyIcon'a çift tıklama olayında tekrar göstererek (this.Show()) arka planda çalışmasını sağlayabilirsiniz.
---

Evet sevgili Webkolog.net okurları, bu yazımızda C# .NET Framework 4 ile NotifyIcon kontrolünün temel özelliklerini, balon ipuçları göstermeyi ve bağlam menüsü eklemeyi detaylı bir şekilde inceledik. NotifyIcon, uygulamalarınızın arka planda çalışırken kullanıcıyla etkileşim kurmasını ve önemli bildirimler sunmasını sağlayan güçlü bir araçtır. Özellikle sistem tepsisinde yer alan yardımcı uygulamalar, izleme araçları veya bildirim sistemleri için vazgeçilmezdir. Umarım bu rehber, C# .NET Framework 4 ile uygulamalar geliştirirken size yardımcı olur. Bir sonraki yazımda, C# dilinin diğer önemli yapı taşlarını keşfetmeye devam edeceğiz. Webkolog.net'i takipte kalın!

Hepinize bildirimlerle dolu ve başarılı geliştirme süreçleri dilerim!

0 yorum:

Yorum Gönder