Pregunta

Tengo un método

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

donde el cuadro de texto en cuestión toma una cadena de búsqueda del usuario y rellena una ListBox con los resultados en cada golpe de teclado.

A continuación, cuando un artículo es tomado de la ListBox, me gustaría la opción reflejada en el mismo Textbox. Sin embargo, no quiero para activar el mecanismo de búsqueda, lo que causaría la Listbox olvidar su selección.

¿Cómo puedo determinar si el evento TextChanged fue provocada por el usuario (a través del teclado o tal vez que copiar / pegar) o por otro método utilizando textBoxPilot.Text = "Pilot name";?

Gracias.

¿Fue útil?

Solución

poco de un truco, pero ....

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

Otros consejos

Un control deshabilitado no se disparará un evento. Así que hay dos opciones de actualización o bien desactivar siempre el texto a continuación, volver a habilitar o crear un contenedor de clase derivada (utilizando este método todavía se podía hacer de enlace de datos)

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

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

Si el usuario selecciona "Nombre de referencia" de la lista, se establece el cuadro de texto para "Nombre de referencia". Esto hará que el cuadro de lista para seleccionar "Nombre de referencia". Por lo que la selección debe mantenerse. Sólo tienes que romper la recursividad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top