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. Однако нажатие клавиш со стрелками для Button события вызывает PreviewKeyDown событие. Обрабатывая PreviewKeyDown событие для Button свойства и задав IsInputKey его trueзначение, можно вызвать KeyDown событие при нажатии клавиш со стрелками. Однако если вы обрабатываете клавиши со стрелками, фокус больше не перейдет к предыдущему или следующему элементу управления.
Дополнительные сведения об обработке событий см. в разделе "Обработка и создание событий".