Frage

Ich habe eine Methode

private void textBoxPilot_TextChanged(object sender, TextChangedEventArgs e)
{ ... }

, wo die Textbox in Frage einen Suchbegriff aus dem Benutzer nimmt und füllt eine ListBox mit den Ergebnissen bei jedem Tastendruck.

Wenn anschließend ein Element aus dem ListBox gepflückt wird, würde ich die Wahl in dem gleichen Textbox reflektierte mögen. Allerdings möchte ich nicht den Suchmechanismus auszulösen, die die Listbox verursachen würde seine Auswahl vergessen.

Wie kann ich feststellen, ob das TextChanged Ereignis durch den Benutzer ausgelöst wurde (über sie Tastatur oder vielleicht Kopieren / Einfügen) oder durch ein anderes Verfahren unter Verwendung von textBoxPilot.Text = "Pilot name";?

Danke.

War es hilfreich?

Lösung

bisschen wie ein Hack, aber ....

public class MyForm : Form
{
    private bool _ignoreTextChanged;

    private void listView1_SelectionChanged( object sender, EventArgs e )
    {
       _ingnoreTextChanged = true;
       textBoxPilot.Text = listView1.SelectedValue.ToString(); // or whatever
    }

    private void textBoxPilot_TextChanged( object sender, TextChangedEventArgs e )
    {
       if( _ignoreTextChanged )
       {
           _ignoreTextChanged = false;
           return;
       }

       // Do what you would normally do.
    }
}

Andere Tipps

Eine deaktivierte Kontrolle wird kein Ereignis ausgelöst. So sind zwei Optionen entweder immer deaktivieren Aktualisierung der Text dann wieder aktivieren oder eine abgeleitete Klasse Wrapper erstellen (mit dieser Methode können Sie noch tun, Datenbindung)

class myClass : TextBox
{
    public virtual string TextWithoutEvents
    {
        get
        {

            return base.Text;
        }
        set
        {
            bool oldState = Enabled;
            Enabled = false;
            base.Text = value;
            Enabled = oldState;
        }
    }
}

Wenn der Benutzer „Pilot name“ aus der Liste, setzen Sie das Textfeld „Pilot name“. Dadurch wird das Listenfeld „Pilot name“ auszuwählen. So soll die Auswahl gehalten werden. Sie müssen nur die Rekursion brechen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top