Pergunta

Eu tenho um método

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

onde a caixa de texto em questão pega uma sequência de pesquisa do usuário e preenche um ListBox com os resultados em cada pressionamento de teclas.

Posteriormente, quando um item é escolhido do ListBox, Eu gostaria da escolha refletida no mesmo Textbox. No entanto, não quero acionar o mecanismo de pesquisa, o que causaria o Listbox para esquecer sua seleção.

Como posso determinar se o TextChanged O evento foi acionado pelo usuário (via teclado ou talvez copiar/colar) ou por outro método usando textBoxPilot.Text = "Pilot name";?

Obrigado.

Foi útil?

Solução

um pouco de hack, mas ....

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

Outras dicas

Um controle desativado não será demitido de um evento. Portanto, duas opções são sempre desativando a atualização do texto e depois criam um invólucro de classe derivado (usando este método que você ainda pode fazer a ligação de dados)

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

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

Se o usuário selecionar "Nome do piloto" na lista, você define a caixa de texto como "Nome do piloto". Isso fará com que a caixa de listagem selecione "Nome do piloto". Portanto, a seleção deve ser mantida. Você só precisa quebrar a recursão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top