Makale Özeti

C# ve Vb.Net ‘de AutoComplete özelliğini inceleyeceğiz. Öncelikle AutoComplete hakkında kısa bilgi vermek istiyorum. AutoComplete ilk olarak Google ‘da uygulanan ve siz kelimeyi yazdıktan sonra o kelimeyi tamamlayan bir yapıdır.Aşağıdaki resimde daha iyi görebilirsiniz.

Makale

Herkese Merhabalar;

C# ve Vb.Net ‘de AutoComplete özelliğini inceleyeceğiz. Öncelikle AutoComplete hakkında kısa bilgi vermek istiyorum. AutoComplete ilk olarak Google ‘da uygulanan ve siz kelimeyi yazdıktan sonra o kelimeyi tamamlayan bir yapıdır.Aşağıdaki resimde daha iyi görebilirsiniz.


 

Gördüğünüz gibi A kelimesine bastıktan sonra otomatik olarak bunun yanına gelebilecek cümleleri kendi tamamlıyor.Hemen Kodlarına geçelim. Her zamanki gibi Microsoft SQL için deneme veritabanı olan Northwind ‘den birkaç isim aldım.

C#

private void Form1_Load(object sender, EventArgs e)
       {
       cmbIsimler.Items.AddRange(new object[] {
                                                               "Aaron Alex",
                                                               "Aaron Bud",
                                                               "Aarts Jan",
                                                               "Abas S.J.",
                                                               "Abbey Michael",
                                                               "Abdelguerfi Mahdi",
                                                               "Abel David",
                                                               "Abel Peter",
                                                               "Abelson Amanda",
                                                               "Baase Sara",
                                                               "Baber Robert Laurence",
                                                               "Babet Bruneau",
                                                               "Bache Richard",
                                                               "Back Thomas",
                                                               "Bacon Jean",
                                                               "Bacon Jonathan",
                                                               "Bacon Jonathan P.",
                                                               "Baczewski Philip"
                                                               });
       }


Vb.NET

Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
        cmbIsimler.Items.AddRange(New Object() {"Aaron Alex", "Aaron Bud", "Aarts Jan", "Abas S.J.", "Abbey Michael", "Abdelguerfi Mahdi", "Abel David", "Abel Peter", "Abelson Amanda", "Baase Sara", "Baber Robert Laurence", "Babet Bruneau", "Bache Richard", "Back Thomas", "Bacon Jean", "Bacon Jonathan", "Bacon Jonathan P.", "Baczewski Philip"})
    End Sub


Form1_Load eventine ComboBox’daki verileri atadıktan sonra şimdide AutoComplete yapacak kodumuzu yazalım

C#

 

public void AutoComplete(ComboBox cb, System.Windows.Forms.KeyPressEventArgs e)
       {
           string strFindStr = "";
 
           if (e.KeyChar == (char)8)
           {
               if (cb.SelectionStart <= 1)
               {
                   cb.Text = "";
                   return;
               }
 
               if (cb.SelectionLength == 0)
                   strFindStr = cb.Text.Substring(0, cb.Text.Length - 1);
               else
                   strFindStr = cb.Text.Substring(0, cb.SelectionStart - 1);
           }
           else
           {
               if (cb.SelectionLength == 0)
                   strFindStr = cb.Text + e.KeyChar;
               else
                   strFindStr = cb.Text.Substring(0, cb.SelectionStart) + e.KeyChar;
           }
 
           int intIdx = -1;
 
      
 
           intIdx = cb.FindString(strFindStr);
 
           if (intIdx != -1)
           {
               cb.SelectedText = "";
               cb.SelectedIndex = intIdx;
               cb.SelectionStart = strFindStr.Length;
               cb.SelectionLength = cb.Text.Length;
               e.Handled = true;
           }
 
       }


Vb.NET

Public Sub AutoComplete(ByVal cb As ComboBox, ByVal e As System.Windows.Forms.KeyPressEventArgs)
       Dim strFindStr As String = ""
       If (e.KeyChar = CType(8,Char)) Then
           If (cb.SelectionStart <= 1) Then
               cb.Text = ""
               Return
           End If
           If (cb.SelectionLength = 0) Then
               strFindStr = cb.Text.Substring(0, (cb.Text.Length - 1))
           Else
               strFindStr = cb.Text.Substring(0, (cb.SelectionStart - 1))
           End If
       ElseIf (cb.SelectionLength = 0) Then
           strFindStr = (cb.Text + e.KeyChar)
       Else
           strFindStr = (cb.Text.Substring(0, cb.SelectionStart) + e.KeyChar)
       End If
       Dim intIdx As Integer = -1
       intIdx = cb.FindString(strFindStr)
       If (intIdx <> -1) Then
           cb.SelectedText = ""
           cb.SelectedIndex = intIdx
           cb.SelectionStart = strFindStr.Length
           cb.SelectionLength = cb.Text.Length
           e.Handled = true
       End If
   End Sub


Yukarıda yazmış olduğumuz metoda bir tane combobox ve onun KeyPress event ini atamamız gerekiyor.O halde ComboBox’ın KeyPress eventinden yararlanıcaz. KeyPress Eventine çift tıklayarak aşağıdaki kodları yazmanız gerekmektedir.

C#

 

private void cmbIsimler_KeyPress(object sender, KeyPressEventArgs e)
        {
            AutoComplete(cmbIsimler, e);
        }


Vb.NET

Private Sub cmbIsimler_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs)
      AutoComplete(cmbIsimler, e)
  End Sub


Kodlarımızı çalıştırdıktan sonra ComboBox’ımızın içine bir harf girdikten sonra tamamlandığını göreceksiniz.Yalnız dikkat etmemiz gereken bir nokta var.ComboBox’ın DropDownStyle özelliği Dropdown olarak kalmalı. DropdownList olarak işaretlediğiniz zaman KeyPress eventi tam tetiklenmiyor.

 Umarım yararlı bir makale olmuştur.

Herkese Sevgilerle..