Control.PreviewKeyDown 이벤트
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
포커스가 이 컨트롤에 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 . a에 PreviewKeyDown 대한 이벤트를 처리하고 속성을 true설정 IsInputKey 하면 화살표 키를 누르면 이벤트가 발생할 KeyDown 수 Button 있습니다. 그러나 화살표 키를 처리하는 경우 포커스가 더 이상 이전 또는 다음 컨트롤로 이동되지 않습니다.
이벤트 처리에 대한 자세한 내용은 이벤트 처리 및 발생시키기를 참조하십시오.