Хммм ....
Это будет выстрел, но вы уже говорили, что у вас есть обработчики событий KeyUp, KeyDown и KeyPress, верно? Вы установили флаг e.Handled в true в обработчиках событий, посмотрите здесь:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
}
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
e.Handled = true;
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
}
Посмотрите здесь в MSDN об этом свойстве Handled. (Если у вас установлен MSDN 2008 SP 1 локально, ссылка будет ms-help://MS.MSDNQTR.v90.en/fxref_system.windows.forms/html/dfc80b44-1d79-6315-cbea-1388a048c018.htm
)
Цитировать:
Handled is implemented differently by different controls within Windows Forms.
For controls like TextBox which subclass native Win32 controls, it is
interpreted to mean that the key message should not be passed to the underlying
native control.
If you set Handled to true on a TextBox, that control will not pass the key
press events to the underlying Win32 text box control, but it will still
display the characters that the user typed.
Может быть, он не установлен, т.е. e.Handled = false;
, что препятствует запуску события TextChanged?
Можете ли вы проверить и подтвердить это?
Редактировать: После ответа dreadprivateryan я могу заподозрить (из-за отсутствия отправленного кода), основываясь на его ответе, e.Handled для true, когда нажата клавиша Enter, и false для всех остальных мой разум думает, что это причина, по которой в результате этого не принимаются никакие дальнейшие нажатия клавиш.
- Пытаетесь ли вы установить фокус на другой элемент управления при нажатии клавиши Enter? Возможно, что и KeyUp, и KeyDown конфликтуют ...
- Снимите клавиатуру и отключите ее ...
- Мое предложение состоит в том, чтобы полностью изменить код, как показано на рисунке, вынуть либо KeyDown, либо KeyUp Event Handler, поскольку они, проще говоря, одинаковы, хорошо, технически, он назначен соответственно для нажатия клавиши вниз, а также, когда ключ отпущен. Посмотрите эту ссылку здесь . Похожий вопрос был размещен здесь на SO.
В приведенном ниже примере я использовал обработчик события keyUp для переключения фокуса на следующий доступный элемент управления при нажатии клавиши ввода. В обработчике событий KeyPress это просто фильтрует ввод и допускает только цифры 0-9 соответственно, все остальное отбрасывается. В этот обработчик событий включена возможность возврата клавиши Backspace для редактирования.
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter) SendKeys.Send("{TAB}");
}
private const string VALID_KEYS = "0123456789";
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (VALID_KEYS.IndexOf(char.ToUpper(e.KeyChar)) != -1 || e.KeyChar == (char)8)
e.Handled = false;
else
e.Handled = true;
}
Надеюсь, это поможет,
С наилучшими пожеланиями,
Том.