2012-03-11 18 views
5

Używam C# winforms visual studio 2010. Mam pole tekstowe, które ma listę jako źródło danych autouzupełniania. Wszystko jest w porządku, ale nie znajduję zdarzenia po kliknięciu autouzupełniania. Chcę, aby w wierszu autouzupełniania trafił i coś innego oprócz wypełnienia pola tekstowego tylko wybraną wartością wiersza. Czy to możliwe?C# Autouzupełnianie Texbox Kliknij wydarzenie

dziękuję

+1

Nie, nie ma zdarzenia ani sam system Windows nie generuje żadnego powiadomienia. Widoczny jest tylko efekt uboczny TextChanged. Informacje ogólne znajdują się w artykule MSDN dla SHAutoComplete –

Odpowiedz

3

Pobiegłem szybki test ten wydaje się działać, nie przeszkadza mi, jeśli jest to całkiem hacky. Stworzyłem UserControl, który dziedziczy po TextBox. Monitoruje zdarzenie , które jest uruchamiane przed zdarzeniem TextChanged, przełącza nieco na true i powoduje, że zdarzenie TextChanged sprawdza bit i rzutuje zdarzenie (AutoCompleteUsed) w celu powiadomienia klas monitorowania, że ​​użyto funkcji automatycznego uzupełniania.

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; 
    } 
} 

Edit 1: @Hans Passant dał mi odpowiedź w swoim komentarzu, po prostu dał ci pracę (ish?) Przykładem.

Powiązane problemy