2012-05-17 16 views
6

C# WinForms izin vermeyen bir Otomatik Tamamlama combobox sahip combobox yazdığınızda şimdi SuggestAppendözel metin

, onu öğelerinin listesinden öğeleri önerir.İyi. Ama mesele şu ki, ne istersem yazabilmek istemiyorum, sadece listesindeki geçerli öğelerden yazı yazabilmek istiyorum. Bu bölümü nasıl düzeltebilirim?

Teşekkürler.

cevap

5

Sen Ürünler değerlerinizin (el ile veya veri bağlama yoluyla) ile listesini doldurmak zorunda ve ardından DropDownList için DropDownStyleolarak belirlersiniz.

Combobox bir Metin Kutusu gibi görünmeyecek, ancak odaklandığı zaman, içine yazarak öğeler listesinden en iyi eşleşmeyi otomatik olarak seçecektir. Eğer DropDown olmak stili isterseniz

(Yani özel bir metin izin vermeyen bir Combobox ayarlamak için önerilen bir yoldur.)

Alternatif olarak, kontrolden KeyPress olayı yakalayabilir ve hızlı bir kontrol yapmak denetim metninin artı e.KeyChar ve listede bulunmuyorsa, e.Handled = True'u ayarlayın. Bu, listede olmayan bir kelimeyle sonuçlanacak tüm tuş vuruşlarını engeller.

+1

Teşekkürler ama bu işe yaramıyor. Evet, istediğimiz her şeyi yazmasını engeller ama aynı zamanda AutoCompletion'u da bozar. Hala yazabiliriz ama her zaman tüm listeyi gösterecek ve filtrelemeyecektir. – Bohn

+0

Başka bir çözüm eklendi. – MCattle

+0

iyi hile, şimdi deneyecek. – Bohn

0

Birleşik kutu denetimi bunu doğrudan desteklemiyor.

Listeden bir öğenin girildiğini doğrulamak için işleyicileri yazmanız ve istemiyorsanız, istemcilere sormanız gerekir.

0

Tam olarak otomatik tamamlama gibi değil, ancak DropDownStyle öğesini DropDownList olarak ayarlarsanız, yalnızca Öğeler koleksiyonundaki girişlere izin verilir. Ancak, bu modun varsayılan davranışı, yazdığınız her harfin, bu harfle başlayan ilk eşleşmeye atlamasıdır. Bu nedenle, ilk harfi geçtikten sonra ek karakterleri yazmaya devam etmelerine izin vermek istiyorsanız, AutoCompleteSource öğesini ListItems olarak ayarlayabilir ve ardından AutoCompleteMode öğesini Eklemek için ayarlayabilirsiniz.

0

Diğer seçenekler TextChanged veya TextUpdated olayına kayıt olabilir ve önceden yazılan metin size uymuyorsa, uygun şekilde değiştirin.

1

Bu, bu birleşik giriş kutusundaki dizelerle eşleşir.

int index = combobox1.FindString(combobox1.Text); 
    if (index < 0) 
    { 
    MessageBox.Show("Invalid Record"); 
    combobox1.Focus(); 
    return; 
    } 
İlgili konular