2012-03-11 16 views
5

Görsel stüdyo 2010 C# winforms kullanıyorum. Otomatik tamamlama veri kaynağı olarak bir listeye sahip bir metin kutusu var. Otomatik tamamlama tıklandığında etkinliği bulamadığım sürece her şey yolunda. Otomatik tamamlama satır isabeti yapmak istiyorum ve sadece seçilen satır değeri ile metin kutusunu doldurmak dışında bir şey. Mümkün mü? Bu oldukça hacky iseC# Otomatik Tamamlama Texbox Tıklayın Etkinlik

Çok teşekkürler

+1

Hayır, herhangi bir olay yoktur ve Windows kendisi de herhangi bir bildirim oluşturur. Sadece TextChanged yan etkisini görebilirsiniz. Arka plan bilgisi SHAutoComplete için MSDN makalesinde –

cevap

3

Ben bu işe görünmektedir hızlı testi yaptık, bana aldırmayın. TextBox'dan devralınan bir UserControl oluşturdum. Bu, TextChanged olayından önce tetiklenen KeyDown olayını izler, biraz true'a geçiş yapar ve TextChanged olayının gözden geçirilmesini denetler ve otomatik tamamlama işlevinin kullanıldığı izleme sınıflarını uyarmak için bir olayı (AutoCompleteUsed) atar.

public partial class MyTextBox : TextBox 
{ 
    public delegate void AutoCompleteDelegate(); 
    public event AutoCompleteDelegate AutoCompleteUsed; 
    public MyTextBox() 
    { 
     InitializeComponent(); 
     this.TextChanged += MyTextBox_TextChanged; 
     this.KeyDown += MyTextBox_KeyDown; 
    } 
    private bool keyPressed = false; 
    void MyTextBox_KeyDown(object sender, KeyEventArgs e) 
    { 
     keyPressed = true; 
    } 

    void MyTextBox_TextChanged(object sender, EventArgs e) 
    { 
     if (!keyPressed && AutoCompleteUsed != null) 
     { 
      AutoCompleteUsed(); 
     } 
     keyPressed = false; 
    } 
} 

Düzenleme 1: @Hans Passant beni onun yorumunda bir cevap verdi, ben sadece (? Ish) Size örnek bir çalışma yaptı.