Хммм ....
Это будет удар, но, ты сказал у вас есть KeyUp, KeyDown и обработчики событий KeyPress правильно? Вы установите флаг e.Handled истину в обработчиках событий, смотрите здесь:
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 событие от стрельбы?
Вы можете проверить и подтвердить это?
Edit: После ответа dreadprivateryan, я могу подозревать, (из-за отсутствия кода публикуемую), основанный на его ответ, e.Handled верно, когда Enter клавиша нажата и ложь для всего остального, которое, на мой взгляд, считает, что именно по этой причине в результате этого не принимаются дальнейшие нажатия клавиш.
- Вы пытаетесь установить фокус на другой элемент управления при нажатии клавиши Enter? Возможно, что и KeyUp, и KeyDown конфликтуют ...
- Удалить крючок клавиатуры и отключить его ...
- Мое предложение состоит в том, чтобы полностью изменить код, как показано на рисунке, вынуть либо KeyDown, либо KeyUp Event Обработчик, как они, упрощенно говоря, один и тот же, нормально, технически, он обозначается соответственно, когда нажата клавиша, а также при отпускании клавиши. Посмотрите на эту ссылку here. Был аналогичный вопрос, размещенный here на 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 = "";
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;
}
Надеется, что это помогает, С наилучшими пожеланиями, Том.
Какие клавиши вы используете, чтобы испытать это? Textchanged является частью свойства Text для текстового поля, и любой вход (альфа и числовой вместе с символами, например $) срабатывает при событии TextChanged, клавиши со стрелками, вставка, перезапись не срабатывает, а попадают в событие KeyUp/KeyDown , – t0mm13b
Очевидным примером может быть нажатие Backspace, когда текстовое поле пуст. Нет события TextChange, но все события клавиатуры. –
Я определенно использую обычные буквенно-цифровые нажатия клавиш, когда это происходит. – dreadpirateryan