Как определить, было ли TextChanged была вызвана клавиатурой в C #?
-
26-09-2019 - |
Вопрос
У меня есть метод
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;
}
}
}
Если пользователь выбирает «Имя пилота» из списка, вы устанавливаете текстовое поле на «Имя пилота». Это приведет к выбору окна списка, чтобы выбрать «Имя пилота». Таким образом, выбор должен быть сохранен. Вы просто должны сломать рекурсию.