Control.PreviewKeyDown イベント

定義

このコントロールにフォーカスがあるときにキーが押された場合、KeyDown イベントの前に発生します。

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 

イベントの種類

PreviewKeyDownEventHandler

を含む を示すコード Button 例を次に示します ContextMenuStrip 。 がフォーカス Button を持ち、上方向キーまたは下方向キーを押すと、 が ContextMenuStrip 表示されます。 イベント PreviewKeyDown ハンドラーは、上方向キーまたは下方向キーが押された状態を検出し、 プロパティを IsInputKey に設定します true 。 これにより、 イベント 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 。 ただし、 の方向キーを押すと Button 、 イベントが発生 PreviewKeyDown します。 の イベントを処理し、 プロパティを に設定することで、方向キーが押された場合に PreviewKeyDown Button IsInputKey true KeyDown イベントを発生できます。 ただし、方向キーを処理する場合、フォーカスは前のコントロールまたは次のコントロールに移動しなくなりました。

イベントの処理の詳細については、「処理とイベントの発生」を参照してください。

適用対象