Как определить, было ли TextChanged была вызвана клавиатурой в C #?

StackOverflow https://stackoverflow.com/questions/3631026

Вопрос

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

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

где рассматриваемый текстовый ящик принимает строку поиска от пользователя и заполняет ListBox с результатами каждого нажатия клавиш.

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

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

Спасибо.

Это было полезно?

Решение

Немного взлома, но ....

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top