Control.PreviewKeyDown Zdarzenie
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Występuje przed zdarzeniem po naciśnięciu KeyDown klawisza, gdy fokus znajduje się na tej kontrolce.
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
Typ zdarzenia
Przykłady
Poniższy przykład kodu przedstawia element Button zawierający ContextMenuStripelement . Gdy obiekt Button ma fokus i naciskasz klawisze STRZAŁKA W GÓRĘ lub STRZAŁKA W DÓŁ, ContextMenuStrip zostanie wyświetlony. Procedura PreviewKeyDown obsługi zdarzeń wykrywa, kiedy są naciśnięte klawisze STRZAŁKA W GÓRĘ lub STRZAŁKA W DÓŁ i ustawia IsInputKey właściwość na true
. Spowoduje to wywołanie KeyDown zdarzenia, aby można było wyświetlić element ContextMenuStrip. Nie należy umieszczać żadnej logiki w procedurze PreviewKeyDown obsługi zdarzeń innej niż w celu ustawienia IsInputKey właściwości . Zamiast tego należy umieścić logikę w procedurze obsługi zdarzeń 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
Uwagi
Niektóre naciśnięcia klawiszy, takie jak TAB, RETURN, ESC i klawisze strzałek, są zwykle ignorowane przez niektóre kontrolki, ponieważ nie są uważane za naciśnięcia klawiszy wejściowych. Na przykład domyślnie kontrolka Button ignoruje klawisze strzałek. Naciśnięcie klawiszy strzałek zwykle powoduje przejście fokusu do poprzedniej lub następnej kontrolki. Klawisze strzałek są uznawane za klawisze nawigacji i naciśnięcie tych klawiszy zwykle nie zgłaszają KeyDown zdarzenia dla elementu Button. Jednak naciśnięcie klawiszy strzałek dla elementu Button powoduje wywołanie PreviewKeyDown zdarzenia. Obsługa PreviewKeyDown zdarzenia dla Button obiektu i ustawienie IsInputKey właściwości na true
, można zgłosić KeyDown zdarzenie po naciśnięciu klawiszy strzałek. Jeśli jednak obsłużysz klawisze strzałek, fokus nie będzie już przechodzić do poprzedniej lub następnej kontrolki.
Aby uzyskać więcej informacji na temat obsługi zdarzeń, zobacz Obsługa i podnoszenie zdarzeń.