Share via


Control.PreviewKeyDown Kejadian

Definisi

Terjadi sebelum KeyDown peristiwa ketika tombol ditekan saat fokus berada pada kontrol ini.

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 

Jenis Acara

Contoh

Contoh kode berikut menunjukkan Button yang menyertakan ContextMenuStrip. Button Saat memiliki fokus dan Anda menekan tombol PANAH ATAS atau PANAH BAWAH, tombol munculContextMenuStrip. Penanganan PreviewKeyDown aktivitas mendeteksi kapan tombol PANAH ATAS atau PANAH BAWAH ditekan dan mengatur properti ke IsInputKeytrue. Ini meningkatkan KeyDown peristiwa sehingga Anda dapat menampilkan ContextMenuStrip. Anda tidak boleh meletakkan logika apa pun di PreviewKeyDown penanganan aktivitas, selain mengatur IsInputKey properti . Sebagai gantinya, Anda harus meletakkan logika Anda di penanganan KeyDown aktivitas.

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

Keterangan

Beberapa penekanan tombol, seperti tombol TAB, RETURN, ESC, dan panah, biasanya diabaikan oleh beberapa kontrol karena tidak dianggap sebagai penekanan tombol input. Misalnya, secara default, Button kontrol mengabaikan tombol panah. Menekan tombol panah biasanya menyebabkan fokus berpindah ke kontrol sebelumnya atau berikutnya. Tombol panah dianggap sebagai tombol navigasi dan menekan tombol ini biasanya tidak memunculkan KeyDown peristiwa untuk Button. Namun, menekan tombol panah untuk Button memang menaikkan PreviewKeyDown peristiwa. Dengan menangani PreviewKeyDown peristiwa untuk dan Button mengatur IsInputKey properti ke true, Anda dapat menaikkan KeyDown peristiwa saat tombol panah ditekan. Namun, jika Anda menangani tombol panah, fokus tidak akan lagi berpindah ke kontrol sebelumnya atau berikutnya.

Untuk informasi selengkapnya tentang menangani peristiwa, lihat Menangani dan Menaikkan Peristiwa.

Berlaku untuk