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.
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 –