다음을 통해 공유


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 이벤트 처리기는 위쪽 화살표 또는 아래쪽 화살표 키를 누를 때를 감지하고 속성을 true로 설정합니다IsInputKey. 이렇게 하면 를 표시할 수 있도록 이벤트가 발생 KeyDown 합니다 ContextMenuStrip. 속성을 설정하는 IsInputKey 것 외에는 PreviewKeyDown 이벤트 처리기에 논리를 배치해서는 안 됩니다. 대신 이벤트 처리기에 논리를 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 화살표 키를 무시합니다. 화살표 키를 누르면 일반적으로 포커스가 이전 또는 다음 컨트롤로 이동합니다. 화살표 키는 탐색 키로 간주되며 이러한 키를 누르면 일반적으로 에 대한 Button이벤트가 발생하지 KeyDown 않습니다. 그러나 에 대한 Button 화살표 키를 누르면 이벤트가 발생합니다 PreviewKeyDown . 에 대 한 Button 이벤트를 처리 하 고 설정 IsInputKeyPreviewKeyDown 여는 속성을 true, 화살표 키를 누를 때 이벤트를 발생 KeyDown 시키는 수 있습니다. 그러나 화살표 키를 처리하면 포커스가 더 이상 이전 또는 다음 컨트롤로 이동하지 않습니다.

이벤트 처리에 대한 자세한 내용은 이벤트 처리 및 발생 을 참조하십시오.

적용 대상