Bu makalemizde,TextBox ve ComboBox kontrollerinin kullanıcıya yazma ve seçme kolaylığı sağlayan Otomatik Tamamlama (Auto Complete) özelliğinden bahsedeceğiz.
İnternet tarayıcılarında, web formlarında veya bilgisayarımızda görmeye alışık olduğumuz bu özelliği, geliştirdiğimiz uygulamalarda da kullanmak mümkün. Bu özellikle uygulamalarımızı daha işlevsel hale getirebiliriz. Belli bir alana, tekrar eden kayıtların girilme durumu varsa, aynı verinin defalarca yazılmasının önüne geçerek, kullanıcıya büyük oranda hız da kazandırabiliriz.
Otomatik tamamlama ile ilgili üç temel özelliğimiz (Property) var.
AutoCompleteMode, otomatik tamamlamanın ne şekilde yapılacağı ile ilgili tercihleri belirler. Varsayılan olarak “None” seçilidir ve tabii ki “None” durumda iken bu özellik devre dışıdır.
Suggest:Bu modda otomatik tamamlama seçenekleri açılır bir listede görüntülenir.
Append: Bu moda yazım, kaynak listesinde yer alan verilerden en uygun olanla otomatik olarak tamamlanır. Tamamlanan bölüm, üzerine yazma aktif olduğundan seçili durumdadır (HighLighted).
AppendSuggest: Suggest ve Append modlarının birleşimidir, her iki modun özelliğini de taşır.
Otomatik tamamlamada kullanılacak kaynakla ilgili tercihleri içerir. Varsayılan olarak “None” seçilidir ve doğal olarak otomatik tamamlama devre dışıdır.
FileSystem: Bu seçenek tercih edildiğinde bilgisayarımıza ait dosya sistemi, otomatik tamamlama kaynağı olarak kullanılır. Dosya sistemi içinde, dosya veya dizin ayrımı yoktur. Tamamı yer alır.
HistoryList: Internet Explorer geçmişi, otomatik tamamlama kaynağı olarak kullanılır.
RecentlyUsedList: Sistemimizin son kullanılanlar listesi, otomatik tamamlama kaynağı olarak kullanılır. Bunlar web adresleri olabildiği gibi, herhangi bir dizin ve dosya adı da olabilir.
AllUrl: HistoryList ve RecentlyUsedList kaynaklarının birlikte kullanılmasını sağlar.
FileSystemDirectories: Bilgisayarımızın sadece dizinleri kaynak listesi olarak kullanılır.
AllSystemSources : FileSystem ve AllUrlkaynaklarının birlikte kullanılmasını sağlar.
CustomSource: Kaynak listenin kullanıcı tarafından belirlenmesine imkan tanıyan seçenektir. Bu seçenek tercih edildiğinde, kaynak olarak bir AutoCompleteStringColection nesnesinin kullanılması gerekir.
ListItems: Sadece ComboBox kontrolü için geçerli bu özellik (Visual Studio 2012’de TextBox’da da mevcut.) seçildiğinde, ComboBox içindeki değerler (ListItems) kaynak listesi olarak kullanılır.
With TextBox1 'Yeni bir AutoCompleStringCollection tanımlıyoruz Dim kaynak As New AutoCompleteStringCollection() 'Yeni oluşturduğumuz kaynağa farklı yöntemlerle veri ekliyoruz kaynak.Add("Ankara") kaynak.Add("Adıyaman") kaynak.AddRange(New String() {"Adana", "Antalya", "Bolu", "Balıkesir"}) 'Generic koleksiyon tanımlıyoruz. Dim liste As New List(Of String)(New String() {"Artvin", "Bilecik"}) 'Aynı koleksiyon içeriğini de kaynağımıza ekliyoruz. kaynak.AddRange(liste.ToArray()) 'Otomatik tamamlama modunu belirliyoruz .AutoCompleteMode = AutoCompleteMode.Suggest 'Otomatik tamamlama için kaynak belirtiyoruz .AutoCompleteSource = AutoCompleteSource.CustomSource 'Kaynak olarak CustomSource seçtiğimiz için 'bu özelliğe bir AutoCompleStringCollection nesnesi atamamız gerekiyor. 'Burada da o atamayı yapıyoruz. .AutoCompleteCustomSource = kaynak End With
With ComboBox1 'Otomatik tamamlama kaynağı olarak veri tabanına attığımız verileri de kullanabiliriz. Dim con As New SqlConnection("connection string") : con.Open() Dim cmd As New SqlCommand("SELECT DISTINCT alanadi FROM tabloadi", con) Dim dr As SqlDataReader = cmd.ExecuteReader 'Tüm combobox içindeki verileri temizliyoruz. .Items.Clear() 'Reader ile tüm okunan verileri combobox'ımıza ekliyoruz. While dr.Read .Items.Add(dr("alanadi")) End While : con.Close() 'Dikkat ederseniz, üstteki örneklerde 'AutoCompleStringCollection oluşturuyor ve verileri ona ekliyorduk. 'Bu örnekte, veritabanından çektiğimiz verilerle combobox'ımızı dolduruyoruz. 'Ayrı bir AutoCompleStringCollection nesnesi oluşturmuyoruz. 'AutoCompleteSource özelliğini, ListItem yapmamız, burada combo içindeki 'verileri otomatik tamamlama kaynağı olarak kullanmamız için yeterli oluyor. .AutoCompleteMode = AutoCompleteMode.Suggest .AutoCompleteSource = AutoCompleteSource.ListItems End With
Otomatik tamamlama özelliğini, DataGridView kontrolünde de kullanabiliriz. Aşağıdaki örnek, tek sütunu bulunan veri ekleme, silme, güncelleme özelliği aktif bir datagridview ile yapıldı. Otomatik tamamlama özelliğini datagridview’de kullanabilmek için işimize yarayan iki event var. Bunlardan ilki, DataGridView kontrolünün ilk sütununda bulunan tüm verileri kaynak listemize ekliyor. İkincisi otomatik tamamlama özelliğini kullanmamızı sağlıyor.
'Otomatik tamamlama koleksiyonumuzu tanımlıyoruz. Dim kaynak As New AutoCompleteStringCollection Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit 'Listemizi boşaltıyoruz. kaynak.Clear() 'DataGridView kontrolümüzde yer alan ve değer içeren hücrelerdeki verileri 'kaynak adlı koleksiyonumuza ekliyoruz. For Each row As DataGridViewRow In DataGridView1.Rows If row.Cells(0).Value <> Nothing Then kaynak.Add(row.Cells(0).Value.ToString) End If Next End Sub Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing 'Hücremizi TextBox'a cast ediyor ve otomatik tamamlama özelliğini kullanılabilir hale getiriyoruz. With DirectCast(e.Control, TextBox) .AutoCompleteMode = AutoCompleteMode.SuggestAppend .AutoCompleteSource = AutoCompleteSource.CustomSource .AutoCompleteCustomSource = kaynak End With End Sub
TextBox veya ComboBox, kontrolümüzü seçtiğimizde, özellikler (Properties) penceresinde bulunan AutoCompleteCustomSource : (Collection) ‘dan, açılan String Collection Editor penceresine değerleri alt alta yazarak da kaynak listemizi oluşturabiliriz.
Çok satır özelliği aktif edilmiş (MultiLine=True) TextBox kontrolünde otomatik tamamlama özelliği kullanılamaz.
Otomatik tamamlama kaynak listesinin büyüklüğü, çalışma zamanında sıkça doldurulması, oluşturulması, yenilenmesi uygulama performansını kötü yönde etkileyebilir.
Yardımcı olması ümidiyle.