Control.PreviewKeyDown Control.PreviewKeyDown Control.PreviewKeyDown Control.PreviewKeyDown Event

定義

このコントロールにフォーカスがあるときにキーが押された場合、KeyDown イベントの前に発生します。Occurs before the KeyDown event when a key is pressed while focus is on this control.

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します。The following code example demonstrates a Button that includes a ContextMenuStrip. ときに、Buttonにフォーカスがあるし、上向き矢印または下向き矢印キーを押して、ContextMenuStripが表示されます。When the Button has the focus and you press the UP ARROW or DOWN ARROW keys, the ContextMenuStrip appears. PreviewKeyDownイベント ハンドラーが ↑ または ↓ キーが押されたときを検出し、設定、IsInputKeyプロパティをtrueします。The PreviewKeyDown event handler detects when the UP ARROW or DOWN ARROW keys are pressed and sets the IsInputKey property to true. これが発生、KeyDownイベント表示できるように、ContextMenuStripします。This raises the KeyDown event so that you can display the ContextMenuStrip. 任意のロジック配置しないで、PreviewKeyDown設定よりもその他のイベント ハンドラー、IsInputKeyプロパティ。You should not put any logic in the PreviewKeyDown event handler, other than to set the IsInputKey property. 代わりに、ロジックを配置する必要があります、KeyDownイベント ハンドラー。Instead, you should put your logic in the KeyDown event handler.

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

注釈

タブ、返された場合、esc キー、および方向キーなどのいくつかのキー入力は、入力のキーの押下がないと見なされるために通常いくつかのコントロールによって無視されます。Some key presses, such as the TAB, RETURN, ESC, and arrow keys, are typically ignored by some controls because they are not considered input key presses. たとえば、既定をButtonコントロールは、方向キーを無視します。For example, by default, a Button control ignores the arrow keys. 前または次のコントロールに移動するフォーカスは、通常、方向キーを押すとします。Pressing the arrow keys typically causes the focus to move to the previous or next control. ナビゲーション キーと通常これらのキーを発生させませんキーを押して、方向キーと見なされます、KeyDownイベントをButtonします。The arrow keys are considered navigation keys and pressing these keys typically do not raise the KeyDown event for a Button. ただし、用のキー、矢印キーを押して、Buttonは発生、PreviewKeyDownイベント。However, pressing the arrow keys for a Button does raise the PreviewKeyDown event. 処理することによって、PreviewKeyDownイベントをButtonと設定、IsInputKeyプロパティをtrue、増やすことができます、KeyDown方向キーが押されたときにイベント。By handling the PreviewKeyDown event for a Button and setting the IsInputKey property to true, you can raise the KeyDown event when the arrow keys are pressed. ただし、方向キーを処理する場合、フォーカスは前または次のコントロールには移動不要になった。However, if you handle the arrow keys, the focus will no longer move to the previous or next control.

イベントの処理の詳細については、「処理とイベントの発生」を参照してください。For more information about handling events, see Handling and Raising Events.

適用対象