Control.PreviewKeyDown Událost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Nastane před událostí KeyDown při stisknutí klávesy, zatímco fokus je na tomto ovládacím prvku.
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
Event Type
Příklady
Následující příklad kódu ukazuje kód Button , který obsahuje ContextMenuStrip. Když má fokus Button a stisknete klávesu ŠIPKA NAHORU nebo ŠIPKA DOLŮ, zobrazí se ContextMenuStrip . Obslužná rutina PreviewKeyDown události zjistí, kdy jsou stisknuty klávesy ŠIPKA NAHORU nebo ŠIPKA DOLŮ, a nastaví IsInputKey vlastnost na true
. Tím se událost vyvolá KeyDown , abyste mohli zobrazit ContextMenuStrip. Do obslužné rutiny události byste neměli vložit žádnou logiku PreviewKeyDownIsInputKey kromě nastavení vlastnosti. Místo toho byste měli logiku vložit do obslužné rutiny KeyDown události.
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
Poznámky
Některá stisknutí kláves, jako jsou klávesy TAB, RETURN, ESC a šipkové klávesy, jsou u některých ovládacích prvků obvykle ignorována, protože se nepovažují za stisknutí vstupní klávesy. Ve výchozím nastavení Button například ovládací prvek ignoruje klávesy se šipkami. Stisknutí kláves se šipkami obvykle způsobí, že se fokus přesune na předchozí nebo další ovládací prvek. Klávesy se šipkami jsou považovány za navigační klávesy a stisknutí těchto kláves obvykle nevyvolá KeyDown událost pro Button. Stisknutí kláves se šipkami ale Button událost vyvolá PreviewKeyDown . Zpracováním PreviewKeyDown události pro Button a nastavením IsInputKey vlastnosti na true
, můžete událost vyvolat KeyDown , když jsou stisknuty klávesy se šipkami. Pokud ale zpracujete klávesy se šipkami, fokus se už nebude přesouvat na předchozí nebo další ovládací prvek.
Další informace o zpracování událostí najdete v tématu Zpracování a vyvolávání událostí.