Control.PreviewKeyDown Ereignis
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Tritt vor dem KeyDown-Ereignis ein, wenn eine Taste gedrückt wird, während dieses Steuerelement den Fokus besitzt.
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
Ereignistyp
Beispiele
Im folgenden Codebeispiel wird ein Button veranschaulicht, das ein ContextMenuStripenthält. Wenn der Button den Fokus hat und Sie die NACH-OBEN- oder NACH-UNTEN-TASTE drücken, wird angezeigt ContextMenuStrip . Der PreviewKeyDown Ereignishandler erkennt, wenn die NACH-OBEN- oder NACH-UNTEN-TASTE gedrückt wird, und legt die IsInputKey -Eigenschaft auf fest true
. Dadurch wird das KeyDown -Ereignis ausgelöst, sodass Sie anzeigen ContextMenuStripkönnen. Sie sollten keine Logik in den PreviewKeyDown Ereignishandler einfügen, außer die IsInputKey Eigenschaft festzulegen. Stattdessen sollten Sie Ihre Logik in den KeyDown Ereignishandler einfügen.
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
Hinweise
Einige Tastendrücke, z. B. die TAB-, RETURN-, ESC- und Pfeiltasten, werden von einigen Steuerelementen in der Regel ignoriert, da sie nicht als Eingabetastendrücke gelten. Beispielsweise ignoriert ein Button Steuerelement standardmäßig die Pfeiltasten. Durch Drücken der Pfeiltasten wird der Fokus in der Regel zum vorherigen oder nächsten Steuerelement verschoben. Die Pfeiltasten gelten als Navigationsschlüssel, und das Drücken dieser Tasten löst in der Regel nicht das KeyDown Ereignis für ein aus Button. Durch Drücken der Pfeiltasten für ein Button wird das PreviewKeyDown Ereignis jedoch ausgelöst. Wenn Sie das PreviewKeyDown Ereignis für ein Button behandeln und die IsInputKey -Eigenschaft auf true
festlegen, können Sie das KeyDown Ereignis auslösen, wenn die Pfeiltasten gedrückt werden. Wenn Sie jedoch die Pfeiltasten behandeln, wird der Fokus nicht mehr zum vorherigen oder nächsten Steuerelement verschoben.
Weitere Informationen zur Behandlung von Ereignissen finden Sie unter behandeln und Auslösen von Ereignissen.