29 Temmuz 2012 Pazar

C# ile SplitContainer

Merhaba değerli Webkolog.net takipçileri, bugünkü yazımızda C# .NET Framework 4 ile Windows Forms uygulamalarında esnek ve yeniden boyutlandırılabilir arayüzler oluşturmak için kullandığımız SplitContainer kontrolünü yakından inceleyeceğiz. SplitContainer, formunuzu veya bir konteyner kontrolünü iki bölmeye ayırarak, kullanıcıların bu bölmelerin boyutlarını fare ile değiştirmesine olanak tanır. Bu, özellikle dosya gezginleri, e-posta istemcileri veya IDE'ler gibi çok bölmeli uygulamalar için idealdir. Gelin, SplitContainer'in temel özelliklerini ve nasıl kullanıldığını birlikte keşfedelim.

SplitContainer Kontrolü Nedir?

SplitContainer kontrolü, bir alanı iki yeniden boyutlandırılabilir bölmeye ayıran bir konteyner kontrolüdür. Bu bölmeler, dikey veya yatay olarak konumlandırılabilir ve aralarında bir bölücü (splitter) bulunur. Kullanıcılar, bölücüyü sürükleyerek bölmelerin boyutlarını dinamik olarak değiştirebilirler. Her bir bölme (Panel1 ve Panel2), kendi içinde diğer kontrolleri barındırabilen bir Panel kontrolü gibi davranır.

SplitContainer Kontrolünün Temel Özellikleri

SplitContainer kontrolü, bölmelerin davranışını ve görünümünü özelleştirmek için birçok önemli özelliğe sahiptir:

  • Panel1: Bölücünün ilk tarafındaki bölmeyi temsil eden Panel nesnesi.
  • Panel2: Bölücünün ikinci tarafındaki bölmeyi temsil eden Panel nesnesi.
  • Orientation: Bölücünün yönünü belirler. Horizontal (yatay, bölmeler üst üste) veya Vertical (dikey, bölmeler yan yana) değerlerini alabilir.
  • SplitterDistance: Bölücünün Panel1'in başlangıcından olan uzaklığını piksel cinsinden belirler. Bu, bölmelerin başlangıç boyutlarını ayarlar.
  • SplitterWidth: Bölücünün genişliğini (dikey ise) veya yüksekliğini (yatay ise) piksel cinsinden belirler.
  • IsSplitterFixed: Eğer true olarak ayarlanırsa, kullanıcının bölücüyü fare ile sürükleyerek boyutları değiştirmesi engellenir.
  • FixedPanel: Yeniden boyutlandırma sırasında hangi panelin sabit boyutlu kalacağını belirler (Panel1, Panel2 veya None).
  • Panel1MinSize: Panel1'in alabileceği minimum boyutu piksel cinsinden belirler.
  • Panel2MinSize: Panel2'nin alabileceği minimum boyutu piksel cinsinden belirler.
  • BackColor: Kontrolün arka plan rengi.
  • BorderStyle: Bölücü çevresine bir kenarlık ekler (None, FixedSingle, Fixed3D).

SplitContainer Kullanım Senaryoları

1. Dikey Bölmeler Oluşturma (Varsayılan)

En yaygın kullanım, formu dikey olarak ikiye bölmektir. Sol panelde bir liste, sağ panelde detaylar gösterebilirsiniz.

using System.Windows.Forms;
using System.Drawing; // Point, Size için

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        // Tasarımcıda bir SplitContainer (splitContainer1) eklenmiş olduğunu varsayalım
        // ve Dock özelliği Fill olarak ayarlanmış olsun.

        this.splitContainer1.Orientation = Orientation.Vertical; // Varsayılan olarak dikey
        this.splitContainer1.SplitterDistance = 200; // Sol panelin genişliği 200 piksel olsun
        this.splitContainer1.FixedPanel = FixedPanel.Panel1; // Sol panel sabit kalsın

        // Panel1'e bir ListView ekleyelim
        ListView listView1 = new ListView();
        listView1.Dock = DockStyle.Fill;
        listView1.View = View.Details;
        listView1.Columns.Add("Öğe Adı", 100);
        listView1.Items.Add("Dosya 1");
        listView1.Items.Add("Dosya 2");
        this.splitContainer1.Panel1.Controls.Add(listView1);

        // Panel2'ye bir TextBox ekleyelim
        TextBox textBoxDetails = new TextBox();
        textBoxDetails.Dock = DockStyle.Fill;
        textBoxDetails.Multiline = true;
        textBoxDetails.Text = "Seçilen dosyanın detayları burada görünecek.";
        this.splitContainer1.Panel2.Controls.Add(textBoxDetails);
    }
}
2. Yatay Bölmeler Oluşturma

Formu yatay olarak ikiye bölmek için Orientation özelliğini Horizontal olarak ayarlarız. Bu durumda, üst panel ve alt panel oluşur.

using System.Windows.Forms;

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

        this.splitContainer1.Orientation = Orientation.Horizontal; // Yatay bölmeler
        this.splitContainer1.SplitterDistance = 150; // Üst panelin yüksekliği 150 piksel olsun

        // Panel1'e bir Label ekleyelim
        Label labelUst = new Label();
        labelUst.Text = "Üst Bölme İçeriği";
        labelUst.Dock = DockStyle.Fill;
        labelUst.TextAlign = ContentAlignment.MiddleCenter;
        this.splitContainer1.Panel1.Controls.Add(labelUst);

        // Panel2'ye bir Button ekleyelim
        Button buttonAlt = new Button();
        buttonAlt.Text = "Alt Bölme Butonu";
        buttonAlt.Dock = DockStyle.Fill;
        this.splitContainer1.Panel2.Controls.Add(buttonAlt);
    }
}
3. İç İçe SplitContainer Kullanımı

Daha karmaşık arayüzler oluşturmak için SplitContainer kontrollerini iç içe yerleştirebiliriz. Örneğin, dikey bir bölmenin panellerinden birine yatay bir SplitContainer ekleyebiliriz.

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

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        // Tasarımcıda bir ana SplitContainer (splitContainerMain) eklenmiş olduğunu varsayalım
        // ve Dock özelliği Fill olarak ayarlanmış olsun.

        this.splitContainerMain.Orientation = Orientation.Vertical;
        this.splitContainerMain.SplitterDistance = 200;

        // Sol panele (Panel1) bir TreeView ekleyelim
        TreeView treeView = new TreeView();
        treeView.Dock = DockStyle.Fill;
        treeView.Nodes.Add("Kategori 1");
        treeView.Nodes.Add("Kategori 2");
        this.splitContainerMain.Panel1.Controls.Add(treeView);

        // Sağ panele (Panel2) yeni bir SplitContainer (splitContainerNested) ekleyelim
        SplitContainer splitContainerNested = new SplitContainer();
        splitContainerNested.Dock = DockStyle.Fill;
        splitContainerNested.Orientation = Orientation.Horizontal; // Yatay bölmeler
        splitContainerNested.SplitterDistance = 100; // Üst panel yüksekliği

        // İç içe SplitContainer'ın üst paneline (Panel1) bir DataGridView ekleyelim
        DataGridView dataGridView = new DataGridView();
        dataGridView.Dock = DockStyle.Fill;
        // Örnek veri ekleme (gerçek uygulamada veritabanından gelir)
        dataGridView.Columns.Add("Col1", "Sütun 1");
        dataGridView.Columns.Add("Col2", "Sütun 2");
        dataGridView.Rows.Add("Veri A", "Değer 1");
        dataGridView.Rows.Add("Veri B", "Değer 2");
        splitContainerNested.Panel1.Controls.Add(dataGridView);

        // İç içe SplitContainer'ın alt paneline (Panel2) bir PropertyGrid veya TextBox ekleyelim
        TextBox propertiesTextBox = new TextBox();
        propertiesTextBox.Dock = DockStyle.Fill;
        propertiesTextBox.Multiline = true;
        propertiesTextBox.Text = "Seçilen öğenin özellikleri burada gösterilecek.";
        splitContainerNested.Panel2.Controls.Add(propertiesTextBox);

        // Ana SplitContainer'ın sağ paneline iç içe SplitContainer'ı ekle
        this.splitContainerMain.Panel2.Controls.Add(splitContainerNested);
    }
}

SplitContainer Olayları

SplitContainer kontrolü, bölücü ile ilgili kullanıcı etkileşimlerine tepki vermek için çeşitli olaylar sunar:

  • SplitterMoving: Kullanıcı bölücüyü sürüklerken sürekli olarak tetiklenir.
  • SplitterMoved: Kullanıcı bölücüyü sürüklemeyi bitirdiğinde tetiklenir. Bu olay, bölmelerin yeni boyutlarını işlemek için kullanışlıdır.
  • SplitterResizing: Bölücü yeniden boyutlandırılırken tetiklenir.
  • Panel1_Resize, Panel2_Resize: Her bir panelin boyutu değiştiğinde tetiklenir.

Örnek: SplitterMoved Olayı

using System.Windows.Forms;

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        // splitContainer1'in tanımlandığını varsayalım
        this.splitContainer1.SplitterMoved += new SplitterEventHandler(splitContainer1_SplitterMoved);
    }

    private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)
    {
        // Bölücü hareket ettirildiğinde yeni konumunu göster
        MessageBox.Show("Bölücü yeni konuma taşındı. Panel1 Genişliği: " + this.splitContainer1.Panel1.Width.ToString() + "px");
        // Veya Panel1'in yeni yüksekliği (eğer Orientation Horizontal ise)
        // MessageBox.Show("Bölücü yeni konuma taşındı. Panel1 Yüksekliği: " + this.splitContainer1.Panel1.Height.ToString() + "px");
    }
}
---

Evet sevgili Webkolog.net okurları, bu yazımızda C# .NET Framework 4 ile SplitContainer kontrolünün temel özelliklerini, kullanım senaryolarını ve olaylarını detaylı bir şekilde inceledik. SplitContainer, uygulamalarınızda esnek, yeniden boyutlandırılabilir ve çok bölmeli arayüzler oluşturmak için güçlü bir araçtır. Özellikle veri yoğun uygulamalarda veya kullanıcıların farklı bilgi alanlarını aynı anda görmesi gereken durumlarda kullanıcı deneyimini önemli ölçüde artırır. 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 esnek ve başarılı geliştirme süreçleri dilerim!

0 yorum:

Yorum Gönder