Revision #4

You are currently reviewing an older revision of this page.
Go to current version

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.

OtomatikTamamlama


AutoCompleteMode Özelliği

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.

  • AutoCompleteMode.Suggest

  • AutoCompleteMode.Append

  • AutoCompleteMode.AppendSuggest

  • AutoCompleteMode.None (Varsayılan)


Suggest:Bu modda otomatik tamamlama seçenekleri açılır bir listede görüntülenir.

OtomatikTamamlama


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).

OtomatikTamamlama


AppendSuggest: Suggest ve Append modlarının birleşimidir, her iki modun özelliğini de taşır.

OtomatikTamamlama


AutoCompleteSource Özelliği

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.

  • AutoCompleteSource.FileSystem

  • AutoCompleteSource.HistoryList

  • AutoCompleteSource.RecentlyUsedList

  • AutoCompleteSource.AllUrl

  • AutoCompleteSource.FileSystemDirectories

  • AutoCompleteSource.AllSystemSources

  • AutoCompleteSource.CustomSource

  • AutoCompleteSource.ListItems

  • AutoCompleteSource.None (Varsayılan)

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.

OtomatikTamamlama


HistoryList: Internet Explorer geçmişi, otomatik tamamlama kaynağı olarak kullanılır.

OtomatikTamamlama


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.

OtomatikTamamlama


AllUrl: HistoryList ve RecentlyUsedList kaynaklarının birlikte kullanılmasını sağlar.

OtomatikTamamlama


FileSystemDirectories: Bilgisayarımızın sadece dizinleri kaynak listesi olarak kullanılır.

OtomatikTamamlama


AllSystemSources : FileSystem ve AllUrlkaynaklarının birlikte kullanılmasını sağlar.

OtomatikTamamlama


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.

OtomatikTamamlama


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.

OtomatikTamamlama


Otomatik Tamamlama Örnekleri

          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


OtomatikTamamlama


   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



OtomatikTamamlama


Son Not:

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.


Revert to this revision