共用方式為


Control.KeyDown 事件

定義

發生於按下按鍵且焦點在控制項時。

public:
 event System::Windows::Forms::KeyEventHandler ^ KeyDown;
public event System.Windows.Forms.KeyEventHandler KeyDown;
public event System.Windows.Forms.KeyEventHandler? KeyDown;
member this.KeyDown : System.Windows.Forms.KeyEventHandler 
Public Custom Event KeyDown As KeyEventHandler 

事件類型

範例

下列程式碼範例會 KeyDown 使用 事件來判斷輸入控制項中的字元類型。

   // 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)
      {         // 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)
    {
        // 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

下列程式碼範例示範引發 KeyDownKeyUpKeyPress 、事件,以及如何在它們上註冊事件處理常式的順序。

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

備註

主要事件會依下列順序發生:

  1. KeyDown

  2. KeyPress

  3. KeyUp

若只要在表單層級處理鍵盤事件,且無法讓其他控制項接收鍵盤事件,請將 KeyPressEventArgs.Handled 表單 KeyPress 事件處理方法中的 屬性設定為 true 。 控制項會自動處理某些索引鍵,例如 TAB、RETURN、ESC 和方向鍵。 若要讓這些索引鍵引發 KeyDown 事件,您必須覆寫 IsInputKey 表單上每個控制項中的 方法。 覆寫 IsInputKey 的程式碼必須判斷是否按下其中一個特殊按鍵,並傳回 的值 true 。 您可以處理 事件, PreviewKeyDown 並將 屬性設定 IsInputKeytrue ,而不是覆 IsInputKey 寫 方法。 如需程式碼範例,請參閱 PreviewKeyDown 事件。

如需處理事件的詳細資訊,請參閱 處理和引發事件

適用於

另請參閱