共用方式為


Control.PreviewKeyDown 事件

定義

當按鍵在該控制鍵上時,會發生在事件發生 KeyDown 前。

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

事件類型

範例

以下程式碼範例展示了 Button 包含 ContextMenuStrip的 。 當他們 Button 有對焦鍵,按下上方向鍵或下箭頭鍵時,它 ContextMenuStrip 就會出現。 PreviewKeyDown事件處理器偵測按下 UP 方向鍵或 DOWN 箭頭鍵時,並將屬性設IsInputKeytrue。 這會提升事件, KeyDown 讓你能顯示 ContextMenuStrip。 你不應該在 PreviewKeyDown 事件處理器中放入任何邏輯,除了設定屬性 IsInputKey 之外。 相反地,你應該把邏輯放進事件處理程式 KeyDown 裡。

public Form1()
{
    InitializeComponent();

    // Form that has a button on it
    button1.PreviewKeyDown +=new PreviewKeyDownEventHandler(button1_PreviewKeyDown);
    button1.KeyDown += new KeyEventHandler(button1_KeyDown);
    button1.ContextMenuStrip = new ContextMenuStrip();
    // Add items to ContextMenuStrip
    button1.ContextMenuStrip.Items.Add("One");
    button1.ContextMenuStrip.Items.Add("Two");
    button1.ContextMenuStrip.Items.Add("Three");
}

// By default, KeyDown does not fire for the ARROW keys
void button1_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Down:
        case Keys.Up:
            if (button1.ContextMenuStrip != null)
            {
                button1.ContextMenuStrip.Show(button1,
                    new Point(0, button1.Height), ToolStripDropDownDirection.BelowRight);
            }
            break;
    }
}

// PreviewKeyDown is where you preview the key.
// Do not put any logic here, instead use the
// KeyDown event after setting IsInputKey to true.
private void button1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Down:
        case Keys.Up:
            e.IsInputKey = true;
            break;
    }
}
Public Class Form1

    Public Sub New()
        InitializeComponent()
        ' Form that has a button on it
        AddHandler Button1.PreviewKeyDown, AddressOf Me.button1_PreviewKeyDown
        AddHandler Button1.KeyDown, AddressOf Me.button1_KeyDown
        Button1.ContextMenuStrip = New ContextMenuStrip
        ' Add items to ContextMenuStrip
        Button1.ContextMenuStrip.Items.Add("One")
        Button1.ContextMenuStrip.Items.Add("Two")
        Button1.ContextMenuStrip.Items.Add("Three")
    End Sub

    ' By default, KeyDown does not fire for the ARROW keys
    Private Sub button1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
        Select Case (e.KeyCode)
            Case Keys.Down, Keys.Up
                If (Not (Button1.ContextMenuStrip) Is Nothing) Then
                    Button1.ContextMenuStrip.Show(Button1, _
                        New Point(0, Button1.Height), ToolStripDropDownDirection.BelowRight)
                End If
        End Select
    End Sub

    ' PreviewKeyDown is where you preview the key.
    ' Do not put any logic here, instead use the
    ' KeyDown event after setting IsInputKey to true.
    Private Sub button1_PreviewKeyDown(ByVal sender As Object, ByVal e As PreviewKeyDownEventArgs)
        Select Case (e.KeyCode)
            Case Keys.Down, Keys.Up
                e.IsInputKey = True
        End Select
    End Sub

End Class

備註

某些按鍵,如 TAB、RETURN、ESC 和方向鍵,通常會被某些控制鍵忽略,因為它們不被視為輸入鍵的按鍵。 例如,預設情況下 Button ,控制鍵會忽略方向鍵。 按下方向鍵通常會讓焦點移到前一個或下一個控制點。 方向鍵被視為導航鍵,按下這些鍵通常不會引發KeyDown事件。Button 不過按方向鍵 a Button 會提升事件。PreviewKeyDown 透過處理 PreviewKeyDown a Button 的事件並將屬性設 IsInputKeytrue,當方向鍵按下時,你可以提高 KeyDown 事件。 不過,如果你操作方向鍵,焦點就不會再移動到前一個或下一個控制點。

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

適用於