2016-03-30 23 views
3

Benim Sorunu bir otomatik tamamlama metin kutusu oluşturma:açılan ile

ben 118 kimyasal element adlarının bir listesi var. Ve yazı yazdığımda, isimleri öneren bir açılır menüyü atacağım bir metin kutusu yapmak istiyorum. Bu metin kutusunu winform'larda yaptım ve bu bir parça kekdi, ancak bunu wpf'de yapma çabaları boşuna. Genişletilmiş wpf toolkit, nimgoble ve bazı otomatik tamamlama metin kutusu libs denedim. Şimdiye kadar çıkmaz sokak ... Ben de yeni wpf için yeniyim, belki bu liblerle bir şeyleri özlüyorum. Öğeleri listeler yapamıyorum ve bazıları açılır menüyü bile göstermeyecek. İstediğim İşte neyi

:

enter image description here

İşte nihayet elde edebilirsiniz:

Yani metin kutusu ve liste bir arada kullanarak çözdü. Metin kutusu kullanıcı türlerinde ve değiştikçe (metin kutusu olayı değişti), tüm 118 öğenin adlarını içeren bir listenin içindeki eşleşmeleri denetler ve yazılan metnin, iç liste kutusundaki eşleşmeleri görüntüler.

private void textBox_TextChanged(object sender, TextChangedEventArgs e) 
    { 

     listBox.Items.Clear(); 


     if (textBox.Text.Trim() != "") 
     { 
      string regexPattern = (textBox.Text.ToString()) + "\\w*"; 
      regexPattern = char.ToUpper(regexPattern[0]) + regexPattern.Substring(1); //prvo slovo veliko 

      Match match = Regex.Match(ElementNames.allElements, regexPattern); 
      while (match.Success && match.Value != "") 
      { 
       listBox.Items.Add(match.Value.ToString()); 
       listBox.Visibility = Visibility.Visible; 

       match = match.NextMatch(); 
      } 
     } 

      if (listBox.Items.IsEmpty || listBox.Items.Count == 119) 
      { 
       listBox.Visibility = Visibility.Collapsed; 
       if (listBox.Items.Count == 119) listBox.Items.Clear(); 
      } 

     HighlightElementsOnTable(); 
     OtherButtonsHighlight(); 
     BringBackColors(); 
    } 
+1

Çok basit bir başlangıç ​​yapmak için öneriyorum. Kullanıcının ne yazdığını görmek için metin değiştirilen etkinliği kullanma. Ardından, göstermek istediğiniz sonuçları yazdırın. Bu işe yararsa, sonuçları göstermek için bir açılır pencere/açılır menüsü eklemeye başlayabilirsiniz ... –

+0

@FeDe Teşekkürler, textbox_changed tetiklendiğinde ve liste kutusunda eşleşmeleri listelerken eşleşmenin nerede ve ne zaman bulunduğunu, metin kutusu ve liste kutusunun bileşimini kullanarak sorunu çözdüm. Ayrıca, herhangi bir kimsenin aldırış etmesini ister, çünkü bu soruya kötü bir cevap veriyorum ve bu sitenin bir parçası olmamı engelliyor. Çok teşekkür ederim .. :) – maran

+0

Sorunuzu biraz değiştirmeyi deneyin. belki ne istediğinizi bir resim ekleyin, biraz daha fazla oyu ne denediğini bir sekme ekleyin ve bazı upvotes aldığınızdan eminim: D –

cevap

4

Bir ComboBoxIsEditable=true ile kullanabilirsiniz: İşte kod.