Control.KeyPress Событие
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Происходит при нажатии клавиши с буквой, пробела или клавиши BACKSPACE, если фокус находится в элементе управления.
public:
event System::Windows::Forms::KeyPressEventHandler ^ KeyPress;
public event System.Windows.Forms.KeyPressEventHandler KeyPress;
public event System.Windows.Forms.KeyPressEventHandler? KeyPress;
member this.KeyPress : System.Windows.Forms.KeyPressEventHandler
Public Custom Event KeyPress As KeyPressEventHandler
Тип события
Примеры
В следующем примере кода событие используется KeyPress для предотвращения ввода символов в элемент управления .
// Boolean flag used to determine when a character other than a number is entered.
private:
bool nonNumberEntered;
// Handle the KeyDown event to determine the type of character entered into the control.
void textBox1_KeyDown( Object^ /*sender*/, System::Windows::Forms::KeyEventArgs^ e )
{
// Initialize the flag to false.
nonNumberEntered = false;
// Determine whether the keystroke is a number from the top of the keyboard.
if ( e->KeyCode < Keys::D0 || e->KeyCode > Keys::D9 )
{
// Determine whether the keystroke is a number from the keypad.
if ( e->KeyCode < Keys::NumPad0 || e->KeyCode > Keys::NumPad9 )
{
// Determine whether the keystroke is a backspace.
if ( e->KeyCode != Keys::Back )
{
// A non-numerical keystroke was pressed.
// Set the flag to true and evaluate in KeyPress event.
nonNumberEntered = true;
}
}
}
//If shift key was pressed, it's not a number.
if (Control::ModifierKeys == Keys::Shift) {
nonNumberEntered = true;
}
}
// This event occurs after the KeyDown event and can be used to prevent
// characters from entering the control.
void textBox1_KeyPress( Object^ /*sender*/, System::Windows::Forms::KeyPressEventArgs^ e )
{
// Check for the flag being set in the KeyDown event.
if ( nonNumberEntered == true )
{ // Stop the character from being entered into the control since it is non-numerical.
e->Handled = true;
}
}
// Boolean flag used to determine when a character other than a number is entered.
private bool nonNumberEntered = false;
// Handle the KeyDown event to determine the type of character entered into the control.
private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
// Initialize the flag to false.
nonNumberEntered = false;
// Determine whether the keystroke is a number from the top of the keyboard.
if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
{
// Determine whether the keystroke is a number from the keypad.
if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
{
// Determine whether the keystroke is a backspace.
if(e.KeyCode != Keys.Back)
{
// A non-numerical keystroke was pressed.
// Set the flag to true and evaluate in KeyPress event.
nonNumberEntered = true;
}
}
}
//If shift key was pressed, it's not a number.
if (Control.ModifierKeys == Keys.Shift) {
nonNumberEntered = true;
}
}
// This event occurs after the KeyDown event and can be used to prevent
// characters from entering the control.
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
// Check for the flag being set in the KeyDown event.
if (nonNumberEntered == true)
{
// Stop the character from being entered into the control since it is non-numerical.
e.Handled = true;
}
}
' Boolean flag used to determine when a character other than a number is entered.
Private nonNumberEntered As Boolean = False
' Handle the KeyDown event to determine the type of character entered into the control.
Private Sub textBox1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) _
Handles textBox1.KeyDown
' Initialize the flag to false.
nonNumberEntered = False
' Determine whether the keystroke is a number from the top of the keyboard.
If e.KeyCode < Keys.D0 OrElse e.KeyCode > Keys.D9 Then
' Determine whether the keystroke is a number from the keypad.
If e.KeyCode < Keys.NumPad0 OrElse e.KeyCode > Keys.NumPad9 Then
' Determine whether the keystroke is a backspace.
If e.KeyCode <> Keys.Back Then
' A non-numerical keystroke was pressed.
' Set the flag to true and evaluate in KeyPress event.
nonNumberEntered = True
End If
End If
End If
'If shift key was pressed, it's not a number.
If Control.ModifierKeys = Keys.Shift Then
nonNumberEntered = true
End If
End Sub
' This event occurs after the KeyDown event and can be used
' to prevent characters from entering the control.
Private Sub textBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) _
Handles textBox1.KeyPress
' Check for the flag being set in the KeyDown event.
If nonNumberEntered = True Then
' Stop the character from being entered into the control since it is non-numerical.
e.Handled = True
End If
End Sub
В следующем примере кода демонстрируется порядок увеличения KeyDownсобытий и KeyUpKeyPress , а также способ регистрации обработчиков событий в них.
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
textBox2.Multiline = true;
textBox2.ScrollBars = ScrollBars.Both;
//Setup events that listens on keypress
textBox1.KeyDown += TextBox1_KeyDown;
textBox1.KeyPress += TextBox1_KeyPress;
textBox1.KeyUp += TextBox1_KeyUp;
}
// Handle the KeyUp event to print the type of character entered into the control.
private void TextBox1_KeyUp(object sender, KeyEventArgs e)
{
textBox2.AppendText( $"KeyUp code: {e.KeyCode}, value: {e.KeyValue}, modifiers: {e.Modifiers}" + "\r\n");
}
// Handle the KeyPress event to print the type of character entered into the control.
private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
textBox2.AppendText( $"KeyPress keychar: {e.KeyChar}" + "\r\n");
}
// Handle the KeyDown event to print the type of character entered into the control.
private void TextBox1_KeyDown(object sender, KeyEventArgs e)
{
textBox2.AppendText( $"KeyDown code: {e.KeyCode}, value: {e.KeyValue}, modifiers: {e.Modifiers}" + "\r\n");
}
}
Public Class Form2
' Handle the KeyDown event to print the type of character entered into the control.
Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown
TextBox2.AppendText($"KeyDown code: {e.KeyCode}, value: {e.KeyValue}, modifiers: {e.Modifiers}" + vbCrLf)
End Sub
' Handle the KeyPress event to print the type of character entered into the control.
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
TextBox2.AppendText($"KeyPress keychar: {e.KeyChar}" + vbCrLf)
End Sub
' Handle the KeyUp event to print the type of character entered into the control.
Private Sub TextBox1_KeyUp(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyUp
TextBox2.AppendText($"KeyUp code: {e.KeyCode}, value: {e.KeyValue}, modifiers: {e.Modifiers}" + vbCrLf)
End Sub
End Class
Комментарии
Ключевые события происходят в следующем порядке:
Событие KeyPress не вызывается не символьными клавишами, кроме пробела и заднего пространства; однако несимвейные клавиши вызывают KeyDown события и KeyUp .
Используйте свойство для KeyChar выборки нажатий клавиш во время выполнения, а также для использования или изменения подмножества общих нажатий клавиш.
Чтобы обрабатывать события клавиатуры только на уровне формы и не разрешать другим элементам управления получать события клавиатуры, задайте свойству KeyPressEventArgs.Handled в методе обработки событий формы KeyPress значение true
.
Дополнительные сведения об обработке событий см. в разделе Обработка и вызов событий.