Domanda

Ho un metodo

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

dove la casella di testo in questione prende una stringa di ricerca da parte dell'utente e popola un ListBox con i risultati su ogni battitura.

Successivamente, quando un prodotto viene prelevato dalla ListBox, desidero la scelta riflessa nella stessa Textbox. Tuttavia, non voglio far scattare il meccanismo di ricerca, che causerebbe la Listbox dimenticare la sua selezione.

Come è possibile determinare se l'evento TextChanged è stato attivato dall'utente (tramite essi tastiera o forse copia / incolla) o con un altro metodo che utilizza textBoxPilot.Text = "Pilot name";?

Grazie.

È stato utile?

Soluzione

po 'di hack, ma ....

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

Altri suggerimenti

Un controllo disattivato non si attiverà un evento. Così due opzioni sono aggiornamento sia sempre disabilitare il testo poi ri-attivare o creare un wrapper classe derivata (con questo metodo si potrebbe ancora fare l'associazione di dati)

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

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

Se l'utente seleziona "Nome Pilota" dalla lista, è possibile impostare la casella di testo "Nome Pilot". Questo farà sì che la casella di riepilogo per selezionare "nome di Pilot". Quindi la scelta dovrebbe essere mantenuto. Non vi resta che rompere la ricorsione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top