Хм, нет никаких причин запрещать клавишу Enter , обрабатывая события KeyDown
или KeyUp
.Вы можете просто установить для свойства AcceptsReturn
элемента управления textbox значение False.Это не позволит многострочному текстовому полю реагировать на нажатие клавиши Enter .
Конечно, это не решает проблему Ctrl + Введите .Фактически это ожидаемый способ создания новой строки, когда для свойства AcceptsReturn
установлено значение False.Чтобы решить эту проблему, вам потребуется обработать одно из событий клавиатуры и не дать элементу управления получить этот ввод.
KeyDown
- хорошее место для начала.Вам нужно отфильтровать любые события клавиатуры, которые включают флаг Keys.Enter
.Это поймает их независимо от того, с какой другой клавишей-модификатором они могут сочетаться.Затем, найдя нажатие клавиши Enter, вы хотите установить для свойства e.Handled
значение True, чтобы предотвратить его передачу в элемент управления.
Но, к сожалению, мы еще не закончилиеще.Элемент управления textbox пытается обработать определенные ключи внутренне, и вы не сможете переопределить это в методе обработки события ключа.Вы также должны указать элементу управления не интерпретировать эту конкретную клавишу как клавишу ввода.Есть два основных способа сделать это.Первый (и рекомендуемый способ) - наследовать от базового класса TextBox
, чтобы создать собственный настраиваемый элемент управления, а затем переопределить защищенный IsInputKey
метод .Второй (несколько более простой) способ - просто обработать событие PreviewKeyDown
и установить для свойства IsInputKey
значение False.
Пример кода:
private void txtPlain_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
// Check if the KeyCode value has the Keys.Enter flag set
if ((e.KeyCode & Keys.Enter) == Keys.Enter)
{
// Set the IsInputKey property to False
e.IsInputKey = false;
}
}
private void txtPlain_KeyDown(object sender, KeyEventArgs e)
{
// Check if the KeyCode value has the Keys.Enter flag set
if ((e.KeyCode & Keys.Enter) == Keys.Enter)
{
// Show the user a message
MessageBox.Show("Enter keys are not allowed in this textbox.");
// Prevent the key event from being passed on to the control
e.Handled = true;
}
}
* 1040И, хотя я предполагаю, что это только для целей тестирования, вы определенно хотите убрать этот вызов
MessageBox
для производственного кода.Найдите другой способ предупредить пользователя о том, что его ввод запрещен, например, короткий звуковой сигнал и
ErrorProvider
компонент , расположенный рядом с текстовым полем.Отображение окна сообщения очень резкое и не очень удобное.См.
мой ответ здесь для других советов и подсказок.