3 Temmuz 2012 Salı

C# ile TreeView

Merhaba değerli Webkolog.net takipçileri, bugünkü yazımızda C# .NET Framework 4 ile Windows Forms uygulamalarında hiyerarşik verileri (ağaç yapısındaki verileri) görsel olarak sunmak için kullandığımız TreeView kontrolünü yakından inceleyeceğiz. Dosya sistemleri, kategoriler, menüler gibi iç içe geçmiş verileri düzenli ve anlaşılır bir şekilde göstermek için TreeView vazgeçilmez bir araçtır. Gelin, TreeView'in temel özelliklerini, düğüm (node) yönetimini ve olaylarını birlikte keşfedelim.

TreeView Kontrolü Nedir?

TreeView kontrolü, verileri ağaç yapısında, yani ana ve alt öğeler (parent-child nodes) şeklinde görüntüler. Her bir öğe bir düğüm (node) olarak adlandırılır ve TreeNode sınıfı ile temsil edilir. Düğümler genişletilebilir veya daraltılabilir, bu da kullanıcıların hiyerarşi içinde kolayca gezinmesini sağlar.

TreeView Kontrolünün Temel Özellikleri

TreeView kontrolü, ağaç yapısını özelleştirmek ve yönetmek için birçok önemli özelliğe sahiptir:

  • Nodes: TreeView'in en üst seviye düğümlerini (root nodes) içeren bir koleksiyondur. Bu koleksiyon aracılığıyla yeni ana düğümler ekleyebilir veya mevcut düğümleri yönetebiliriz.
  • SelectedNode: Kullanıcı tarafından seçilen mevcut düğümü döndürür veya ayarlar.
  • CheckBoxes: Eğer true olarak ayarlanırsa, her düğümün yanında bir onay kutusu (checkbox) görüntülenir. Bu, kullanıcıların düğümleri seçip işaretlemesini sağlar.
  • FullRowSelect: Eğer true olarak ayarlanırsa, bir düğüme tıklandığında tüm satırın seçili görünmesini sağlar.
  • HideSelection: Kontrol odak dışı kaldığında seçili düğümün vurgusunun gizlenip gizlenmeyeceğini belirler.
  • ImageIndex, SelectedImageIndex, StateImageIndex: Düğümlerle ilişkilendirilecek resimlerin indekslerini belirler. Bu resimler, ImageList bileşeninden alınır.
  • ImageList: Düğümlerin yanında görüntülenecek resimleri içeren ImageList bileşenini ayarlar.
  • ShowLines: Düğümler arasındaki bağlantı çizgilerinin gösterilip gösterilmeyeceğini belirler.
  • ShowPlusMinus: Düğümlerin yanında genişletme/daraltma (+/-) işaretlerinin gösterilip gösterilmeyeceğini belirler.
  • ShowRootLines: Kök düğümler ile alt düğümleri arasındaki çizgilerin gösterilip gösterilmeyeceğini belirler.
  • LabelEdit: Eğer true olarak ayarlanırsa, kullanıcıların düğüm metinlerini düzenlemesine izin verir.

TreeNode Sınıfı ve Özellikleri

TreeView içindeki her bir düğüm, TreeNode sınıfının bir örneğidir. TreeNode'ların da kendi özellikleri bulunur:

  • Text: Düğüm üzerinde görünen metin.
  • Name: Düğümün benzersiz adı (kod içinde erişim için).
  • Nodes: Bu düğümün alt düğümlerini içeren bir koleksiyon. Bu koleksiyon aracılığıyla bir düğüme alt düğümler ekleyebiliriz.
  • Parent: Düğümün üst düğümünü döndürür.
  • Tag: Düğümle ilişkilendirilebilecek herhangi bir nesneyi saklamak için kullanılır (örneğin, bir veritabanı ID'si).
  • IsExpanded: Düğümün genişletilmiş (açık) olup olmadığını gösterir.
  • IsSelected: Düğümün seçili olup olmadığını gösterir.
  • ImageIndex, SelectedImageIndex: Bu düğüme özel resim indeksleri.

Düğüm Ekleme ve Yönetimi

Düğümleri TreeView'e eklemenin ve yönetmenin çeşitli yolları vardır:

1. Kök Düğüm Ekleme

TreeView'in Nodes koleksiyonuna doğrudan düğüm ekleyerek kök düğümler oluştururuz.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        // Tasarımcıda bir TreeView (treeView1) eklenmiş olduğunu varsayalım

        // treeView1.Nodes koleksiyonuna yeni bir TreeNode ekle
        TreeNode rootNode1 = new TreeNode("Kategoriler");
        this.treeView1.Nodes.Add(rootNode1);

        TreeNode rootNode2 = new TreeNode("Ürünler");
        this.treeView1.Nodes.Add(rootNode2);
    }
}
2. Alt Düğüm Ekleme

Mevcut bir TreeNode'un Nodes koleksiyonuna düğüm ekleyerek alt düğümler oluştururuz.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        // treeView1 ve rootNode1'in yukarıdaki gibi tanımlandığını varsayalım

        TreeNode rootNode1 = new TreeNode("Kategoriler");
        this.treeView1.Nodes.Add(rootNode1);

        // rootNode1'e alt düğümler ekle
        TreeNode altNode1 = new TreeNode("Elektronik");
        rootNode1.Nodes.Add(altNode1);

        TreeNode altNode2 = new TreeNode("Giyim");
        rootNode1.Nodes.Add(altNode2);

        // Elektronik altına alt düğüm ekle
        altNode1.Nodes.Add("Telefonlar");
        altNode1.Nodes.Add("Bilgisayarlar");

        // Tüm düğümleri genişlet (isteğe bağlı)
        this.treeView1.ExpandAll();
    }
}
3. Düğüm Temizleme

Tüm düğümleri temizlemek için Nodes.Clear() metodunu kullanırız.

this.treeView1.Nodes.Clear(); // Tüm düğümleri temizler
4. Düğüm Silme

Belirli bir düğümü silmek için Remove() veya RemoveAt() metotlarını kullanırız.

if (this.treeView1.SelectedNode != null)
{
    this.treeView1.SelectedNode.Remove(); // Seçili düğümü sil
}
5. Düğüm Bulma

Belirli bir metne veya isme sahip düğümleri bulmak için Find() metodunu kullanabiliriz.

TreeNode[] bulunanDugumler = this.treeView1.Nodes.Find("Telefonlar", true); // İkinci parametre alt düğümlerde de arama yapmayı sağlar
if (bulunanDugumler.Length > 0)
{
    MessageBox.Show("Telefonlar düğümü bulundu!");
    this.treeView1.SelectedNode = bulunanDugumler[0]; // Bulunan ilk düğümü seç
    this.treeView1.SelectedNode.Expand(); // Seçili düğümü genişlet
}

TreeView Olayları

TreeView kontrolü, kullanıcı etkileşimlerine ve düğüm durum değişikliklerine tepki vermek için çeşitli olaylar sunar:

  • AfterSelect: Bir düğüm seçildikten sonra tetiklenir. En sık kullanılan olaydır.
  • BeforeSelect: Bir düğüm seçilmeden önce tetiklenir. Seçimi iptal etme imkanı sunar.
  • AfterExpand: Bir düğüm genişletildikten sonra tetiklenir.
  • BeforeExpand: Bir düğüm genişletilmeden önce tetiklenir. Genişletmeyi iptal etme imkanı sunar.
  • AfterCollapse: Bir düğüm daraltıldıktan sonra tetiklenir.
  • BeforeCollapse: Bir düğüm daraltılmadan önce tetiklenir. Daraltmayı iptal etme imkanı sunar.
  • AfterCheck: Bir düğümün onay kutusu durumu değiştirildikten sonra tetiklenir (CheckBoxes özelliği true ise).
  • BeforeCheck: Bir düğümün onay kutusu durumu değiştirilmeden önce tetiklenir. Değişikliği iptal etme imkanı sunar.
  • NodeMouseClick: Bir düğüme fare ile tıklandığında tetiklenir.
  • NodeMouseDoubleClick: Bir düğüme fare ile çift tıklandığında tetiklenir.
  • AfterLabelEdit: Düğüm metni düzenlendikten sonra tetiklenir (LabelEdit özelliği true ise).

Örnek: AfterSelect Olayı

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        // treeView1'in yukarıdaki gibi düğümlerle doldurulduğunu varsayalım
        this.treeView1.AfterSelect += new TreeViewEventHandler(treeView1_AfterSelect);
    }

    private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
    {
        // Seçilen düğümün metnini MessageBox ile göster
        MessageBox.Show("Seçilen Düğüm: " + e.Node.Text);
        // Seçilen düğümün Tag özelliğine erişilebilir
        // if (e.Node.Tag != null)
        // {
        //     MessageBox.Show("Düğüm Tag'i: " + e.Node.Tag.ToString());
        // }
    }
}

ImageList ile İkon Kullanımı

Düğümlerin yanında ikonlar (resimler) görüntülemek, TreeView'i daha görsel ve bilgilendirici hale getirir. Bunun için bir ImageList bileşeni kullanılır.

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

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        // Tasarımcıda bir TreeView (treeView1) ve bir ImageList (imageList1) eklenmiş olduğunu varsayalım
        // imageList1'e bazı ikonlar eklemiş olalım (örneğin, bir klasör ikonu, bir dosya ikonu)

        this.treeView1.ImageList = this.imageList1; // TreeView'e ImageList'i ata

        TreeNode rootNode = new TreeNode("Belgelerim", 0, 0); // Metin, normal ikon indeksi, seçili ikon indeksi
        this.treeView1.Nodes.Add(rootNode);

        TreeNode subNode1 = new TreeNode("Raporlar", 1, 1); // Farklı ikonlar
        rootNode.Nodes.Add(subNode1);

        TreeNode subNode2 = new TreeNode("Resimler", 0, 0);
        rootNode.Nodes.Add(subNode2);

        this.treeView1.ExpandAll();
    }
}

TreeNode oluştururken, ikinci parametre normal durumdaki ikonun indeksini, üçüncü parametre ise düğüm seçildiğinde kullanılacak ikonun indeksini belirtir. Bu indeksler, ImageList bileşenindeki resimlerin sırasına karşılık gelir.

---

Evet sevgili Webkolog.net okurları, bu yazımızda C# .NET Framework 4 ile TreeView kontrolünün temel özelliklerini, düğüm yönetimini ve olaylarını detaylı bir şekilde inceledik. TreeView, hiyerarşik verileri görsel ve etkileşimli bir şekilde sunmak için güçlü bir araçtır ve dosya gezginleri, kategori listeleri, menüler gibi birçok uygulamada karşımıza çıkar. 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 ağaç yapılı verilerle dolu ve başarılı geliştirme süreçleri dilerim!

0 yorum:

Yorum Gönder