Aracılığıyla paylaş


Control.PreviewKeyDown Olay

Tanım

Odak bu denetimdeyken KeyDown bir tuşa basıldığında olaydan önce gerçekleşir.

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 

Olay Türü

Örnekler

Aşağıdaki kod örneğinde içeren bir Button gösterilmektedir ContextMenuStrip. Button odak olduğunda ve YUKARI OK veya AŞAĞI OK tuşlarına bastığınızda, ContextMenuStrip açılır. Olay işleyicisiPreviewKeyDown, YUKARI OK veya AŞAĞI OK tuşlarına basıldığında algılar ve özelliğini olarak trueayarlarIsInputKey. Bu, olayı tetikler KeyDown ve böylece öğesini görüntüleyebilirsiniz ContextMenuStrip. Olay işleyicisine PreviewKeyDown özelliğini ayarlamak IsInputKey dışında herhangi bir mantık yerleştirmemelisiniz. Bunun yerine mantığınızı olay işleyicisine KeyDown yerleştirmeniz gerekir.

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

Açıklamalar

SEKME, RETURN, ESC ve ok tuşları gibi bazı tuş basılmaları genellikle bazı denetimler tarafından yoksayılır çünkü bunlar giriş tuşuna basma olarak kabul edilmez. Örneğin, bir Button denetim varsayılan olarak ok tuşlarını yoksayar. Ok tuşlarına basmak genellikle odağın önceki veya sonraki denetime taşınmasına neden olur. Ok tuşları gezinti tuşları olarak kabul edilir ve bu tuşlara basıldığında genellikle için Buttonolayı tetiklemezKeyDown. Ancak, için Button ok tuşlarına basıldığında olay tetikler PreviewKeyDown . için olayını işleyip PreviewKeyDown özelliğini olarak trueayarlayarakIsInputKey, ok tuşlarına basıldığında olayı tetikleyebilirsinizKeyDown.Button Ancak ok tuşlarını işlerseniz odak artık önceki veya sonraki denetime taşınmaz.

Olayları işleme hakkında daha fazla bilgi için bkz . Olayları İşleme ve Oluşturma.

Şunlara uygulanır