Как определить, был ли TextChanged запущен с клавиатуры в C #? - PullRequest
2 голосов
/ 03 сентября 2010

У меня есть метод

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

, где рассматриваемое текстовое поле берет строку поиска у пользователя и заполняет ListBox результатами при каждом нажатии клавиши.предмет выбран из ListBox, хотелось бы, чтобы выбор отражался в том же Textbox.Однако я не хочу запускать механизм поиска, который заставил бы Listbox забыть о своем выборе.

Как определить, было ли событие TextChanged инициировано пользователем (с помощью клавиатурыили, может быть, скопировать / вставить) или другим способом, используя textBoxPilot.Text = "Pilot name";?

Спасибо.

Ответы [ 3 ]

1 голос
/ 03 сентября 2010

хак, но ....

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.
    }
}
1 голос
/ 03 сентября 2010

Отключенный элемент управления не будет запускать событие.Таким образом, два варианта: либо всегда отключить обновление текста, затем снова включить или создать оболочку производного класса (используя этот метод, вы все равно можете делать привязку данных)

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

            return base.Text;
        }
        set
        {
            bool oldState = Enabled;
            Enabled = false;
            base.Text = value;
            Enabled = oldState;
        }
    }
}
0 голосов
/ 03 сентября 2010

Если пользователь выбирает «Имя пилота» из списка, вы устанавливаете текстовое поле на «Имя пилота». Это заставит в списке выбрать «Имя пилота». Таким образом, выбор должен быть сохранен. Вы просто должны прервать рекурсию.

...