Sdílet prostřednictvím


Control.PreviewKeyDown Událost

Definice

Nastane před událostí KeyDown , když je stisknuta klávesa, 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 Button , že obsahuje ContextMenuStrip. Button Když je fokus a stisknete klávesy ŠIPKA NAHORU nebo ŠIPKA DOLŮ, zobrazí seContextMenuStrip. Obslužná PreviewKeyDown rutina události zjistí, kdy jsou stisknuty klávesy ŠIPKA NAHORU nebo ŠIPKA DOLŮ a nastaví IsInputKey vlastnost na true. Tím se KeyDown vyvolá událost, 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 KeyDown obslužné rutiny 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é klávesy, jako jsou klávesy TAB, RETURN, ESC a šipkové klávesy, jsou obvykle některé ovládací prvky ignorovány, protože se nepovažují za stisknutí vstupní klávesy. Ve výchozím nastavení Button například ovládací prvek ignoruje šipkové klávesy. Stisknutí kláves se šipkami obvykle způsobí, že se fokus přesune na předchozí nebo další ovládací prvek. Šipkové klávesy jsou považovány za navigační klávesy a stisknutí těchto kláves obvykle nevyvolá KeyDown událost pro Button. Nicméně stisknutí kláves se šipkami ButtonPreviewKeyDown pro vyvolání události. PreviewKeyDown Zpracování události pro Button a nastavení IsInputKey vlastnosti truena , můžete KeyDown vyvolat událost při stisknutí kláves se šipkami. Pokud ale použijete klávesy se šipkami, fokus se už nepřesune na předchozí nebo další ovládací prvek.

Další informace o zpracování událostí naleznete v tématu Zpracování a vyvolávání událostí.

Platí pro