Question

J'ai une méthode

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

où la zone de texte en question prend une chaîne de recherche de l'utilisateur et renseigne un ListBox avec les résultats sur chaque pression de touche.

Par la suite, lorsqu'un élément est choisi dans le ListBox, je souhaite que le choix reflète dans le même Textbox. Cependant, je ne veux pas déclencher le mécanisme de recherche, ce qui causerait la Listbox oublier sa sélection.

Comment puis-je déterminer si l'événement TextChanged a été déclenchée par l'utilisateur (via leur clavier ou peut-être copier / coller) ou par une autre méthode en utilisant textBoxPilot.Text = "Pilot name";?

Merci.

Était-ce utile?

La solution

peu un hack, mais ....

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

Autres conseils

Un contrôle désactivé ne se déclenche pas un événement. Donc, deux options sont soit toujours désactiver la mise à jour du texte puis réactiver ou créer un wrapper de classe dérivée (en utilisant cette méthode, vous pouvez toujours faire la liaison de données)

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

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

Si l'utilisateur de « nom pilote » dans la liste, vous définissez la zone de texte « nom pilote ». Cela entraînera la liste pour sélectionner « nom Pilot ». Ainsi, la sélection doit être maintenue. Il vous suffit de briser la récursion.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top