WPF

WPF ComboBox Kullanımı

Bir Combox kontrolü , ListBox kontrolü oluşturmak için kullanılan farklı bir yoldur. ListBox kontrolünden farklı olarak, ComboBox kontrolü açılır şekilde kullanılır ve tek değer seçilmesine izin verir.

Yazım:

 

Bir ComboBox kontrolü, bir listeyi yada diziyi kendine kaynak olarak alabileceği gibi en çok kullanılan yöntem olan  ComboBoxItem koleksiyonu da kendisine kaynak olarak almaktadır.

Aşağıdaki örnekte XAML kullanarak ComboBox denetimine ComboBoxItem öğleri eklenmiştir.

Örnek 1

Çalışma anında ComboBox içine değer ekleme ve ComboBox içinden Değer Silme

Yukarıdaki örnekte ComboBoxItem nesnelerini XAML ekranında eklemiştik. Şimdi aşağıdaki ekrandaki uygulama ile ComboBox içine değer ekleme ve ComboBox içinden değer silme işlemini yapacağız. Uygulamada ComboBox nesnesi cbListe, TextBox nesnesi txtHobi ve Button nesneleri btnEkle, btnSil olarak isimlendirilmiştir.

 

Ekleme İşlemi: btnEkle butonuna tıklandığında txtHobi içindeki değeri cbListe içine ekleyelim. btnEkle butonunun tıklama olayını aşağıdaki gibi oluşturuyoruz.

Değer Silme: btnSil nesnesine tıklandığında ComboBox içinde seçili olan nesneyi silmek için btnSil butonunun tıklama olayını aşağıdaki gibi oluşturuyoruz.

Silme işlemi gerçekleştirilirken combobox içinde seçim yapılmış olması gerekiyor. Seçim yapılmamış ise -1 değeri dönecektir. Bu kontrol için SelectedIndex değerinin -1 değerinden büyük olup olmadığı kontrol edilmelidir.

 

Örnek 2

ComboBox Seçim Gerçekleştiğinde Çalışacak Olay

ComboBox içinde bir değer değişikliği olduğunda SelectionChanged olayı ile değişimi kontrol etmek ve çeşitli işlemler yapmak mümkün hale geliyor.

Hobiler(cbListe) ile gösterilen değerler seçme işlemi yapıldığında Secili Hobiler(cbHobi) içine aktarılmaktadır.

Uygulamada cbListe içinde seçilen hobiler, cbSecim içine kaydetme işlemi yapılmaktadır. cbListe nesnenin SelectionChanged olayını aşağıdaki gibi oluşturuyoruz.

Aynı şekilde cbSecim içindeki seçimleri de cbListe içine tekrar atmak için cbSecim nesnesinin SelectionChanged olayına gerekli kodları aşağıdaki gibi yazıyoruz.

Not: ComboBoxItem nesneleri bir koleksiyon öğesidir. Bu nedenle öge bir koleksiyona bağlı ise önce bağlı olduğu bağlantı kaldırılmalı sonra da başka bir öge içine aktarılmalıdır. Uygulamayı bu sıra ile yapmak önemlidir. Aksi durumda şu şekilde bir hata ile karşılaşılacaktır.  Additional information: Öğenin zaten mantıksal bir öğesi var. Yeni bir üst öğeye bağlanmadan önce eskisinden bağlantısının kesilmesi gerekir.

 

Örnek 3

Örnek 2 ile ComboBoxItem nesnesi olarak eklme yapılabileceği gibi properties paneli içinde Items sekmesi kullanılarak da ComboBox içine component ekleme işlemi gerçekleştirilebilir.

 

Örnek 4

Adım 1: Mevcut bir listeyi ComboBox için veri kaynağı olarak ayarlayabiliriz. Veri kaynağı (Item Source) olarak ayarlamak için örnek 2 uygulamasında bulunan ComboBoxItem nesnelerini aşağıdaki gibi XAML içinden çıkarıp uygulamaya başlıyoruz.

 

Adım 2: List<string> koleksiyonuna uygulamadaki metotlardan ulaşmak için sınıf içinde oluşturduk.
Oluşturulan liste  MainWindow kurucu metodu içinde örneklenip, içerisi değeler ile dolduruldu.
ComboBox(cbListe) nesnesinin ItemSource(veri kaynağı) için mevcut List koleksiyonu kaynak olarak gösterildi.
Burada iki tane liste olması dikkat çekmiş olabilir. listelerden biri cbListe için diğeri ise cbSecim için oluşturmuştur. Listeler içinde veri taşıma işlemi gerçekleştiğinde ComboBox içindeki verilerde güncellenecektir.

Uygulama bu aşamada test edilirse cbListe içinde veriler duldurulmuş bir şekilde liste içinde gösterilecektir.

Adım 3: Bu aşamada cbListe içinde bir nesne seçildiğinde, aktif olan nesnenin index değeri okunacak ve mevcut sıradaki değer listSeciliHobiler içine aktarılacaktır. Sonrada aktif olan index listHobiler koleksiyonundan çıkarılacak ve ComboBox nesneleri güncellenecektir. Bu işlem cbListe nesnesinin SelectionChanged olayı gerçekleştiğinde yapılacaktır.

 

Adım 4: Bu adımda ise seçili hobilere tıkladığımızda cbSecim içnden çıkarıp cbListe içine ekleme işlemini gerçekleştireceğiz. Adım 3 içinde yapılanın tam tersini yapacağız.

 

Yorum

Yorum Yap