Control.PreviewKeyDown Evento
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Se produce antes que el evento KeyDown cuando se presiona una tecla mientras el foco está en este control.
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
Tipo de evento
Ejemplos
En el ejemplo de código siguiente se muestra un Button objeto que incluye .ContextMenuStrip
Button Cuando tiene el foco y presiona las teclas FLECHA ARRIBA o FLECHA ABAJO, ContextMenuStrip aparece . El PreviewKeyDown controlador de eventos detecta cuándo se presionan las teclas FLECHA ARRIBA o FLECHA ABAJO y establece la IsInputKey propiedad en true
. Esto genera el KeyDown evento para que pueda mostrar .ContextMenuStrip No debe colocar ninguna lógica en el PreviewKeyDown controlador de eventos, excepto para establecer la IsInputKey propiedad . En su lugar, debe colocar la lógica en el KeyDown controlador de eventos.
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
Comentarios
Algunas pulsaciones de tecla, como las teclas TAB, RETURN, ESC y flecha, normalmente se omiten en algunos controles porque no se consideran pulsaciones de teclas de entrada. Por ejemplo, de forma predeterminada, un Button control omite las teclas de dirección. Presionar las teclas de dirección normalmente hace que el foco se mueva al control anterior o siguiente. Las teclas de dirección se consideran teclas de navegación y, normalmente, al presionar estas teclas, no se genera el KeyDown evento para .Button Sin embargo, al presionar las teclas de dirección para , Button se genera el PreviewKeyDown evento . Al controlar el PreviewKeyDown evento de y Button establecer la IsInputKey propiedad true
en , puede generar el KeyDown evento cuando se presionan las teclas de dirección. Sin embargo, si controla las teclas de dirección, el foco ya no se moverá al control anterior o siguiente.
Para obtener más información sobre el manejo de eventos, consulte controlar y provocar eventos.