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.

적용 대상