Control.PreviewKeyDown Событие
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Генерируется перед событием KeyDown при нажатии клавиши, когда элемент управления имеет фокус.
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
Тип события
Примеры
В следующем примере кода демонстрируется Button объект , включающий ContextMenuStrip. Если объект Button имеет фокус и вы нажимаете клавиши СТРЕЛКА ВВЕРХ или СТРЕЛКА ВНИЗ, ContextMenuStrip появляется . Обработчик PreviewKeyDown событий определяет, когда нажимаются клавиши СТРЕЛКА ВВЕРХ или СТРЕЛКА ВНИЗ, и задает свойству IsInputKey значение true
. При этом возникает KeyDown событие , чтобы можно было отобразить ContextMenuStrip. Не следует помещать логику PreviewKeyDown в обработчик событий, кроме как для задания IsInputKey свойства . Вместо этого следует поместить логику 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
Комментарии
Некоторые нажатия клавиш, такие как клавиши TAB, RETURN, ESC и стрелки, обычно игнорируются некоторыми элементами управления, так как они не считаются нажатиями клавиш ввода. Например, по умолчанию Button элемент управления игнорирует клавиши со стрелками. Нажатие клавиш со стрелками обычно приводит к переходу фокуса к предыдущему или следующему элементу управления. Клавиши со стрелками считаются клавишами навигации, и их нажатие обычно не вызывает KeyDown событие для Button. Однако нажатие клавиш со стрелками для вызывает ButtonPreviewKeyDown событие . Обрабатывая PreviewKeyDown событие для Button и устанавливая для IsInputKey свойства true
значение , можно вызывать KeyDown событие при нажатии клавиш со стрелками. Однако при обработке клавиш со стрелками фокус больше не будет перемещаться к предыдущему или следующему элементу управления.
Дополнительные сведения об обработке событий см. в разделе Обработка и вызов событий.