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 auf, bevor das KeyDown Ereignis auftritt, wenn eine Taste gedrückt wird, während sich der Fokus auf diesem Steuerelement befindet.
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 Beispiel veranschaulicht, das eine ContextMenuStrip. Wenn der Button Fokus liegt und Sie die NACH-OBEN- oder NACH-UNTEN-TASTE drücken, wird die ContextMenuStrip Schaltfläche angezeigt. Der PreviewKeyDown Ereignishandler erkennt, wenn die NACH-OBEN- oder NACH-UNTEN-TASTE gedrückt wird, und legt die IsInputKey Eigenschaft auf true. Dadurch wird das KeyDown Ereignis ausgelöst, sodass Sie das ContextMenuStripEreignis anzeigen können. Sie sollten keine Logik in den PreviewKeyDown Ereignishandler einfügen, außer die Eigenschaft festzulegen IsInputKey . Stattdessen sollten Sie die 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. TAB, EINGABETASTE, ESC und Pfeiltasten, werden in der Regel von einigen Steuerelementen ignoriert, da sie nicht als Eingabetastendrücke betrachtet werden. Ein Steuerelement ignoriert beispielsweise standardmäßig Button die Pfeiltasten. Wenn Sie die Pfeiltasten drücken, wird der Fokus in der Regel auf das vorherige oder nächste Steuerelement verschoben. Die Pfeiltasten werden als Navigationstasten betrachtet und durch Drücken dieser Tasten wird das Ereignis in der KeyDown Regel nicht für ein ButtonEreignis ausgelöst. Durch Drücken der Pfeiltasten für ein Button Ereignis wird jedoch das PreviewKeyDown Ereignis ausgelöst. Wenn Sie das PreviewKeyDown Ereignis für ein Button Ereignis behandeln und die IsInputKey Eigenschaft auf truefestlegen, können Sie das KeyDown Ereignis auslösen, wenn die Pfeiltasten gedrückt werden. Wenn Sie jedoch die Pfeiltasten behandeln, wechselt der Fokus nicht mehr zum vorherigen oder nächsten Steuerelement.
Weitere Informationen zur Behandlung von Ereignissen finden Sie unter behandeln und Auslösen von Ereignissen.