Control.PreviewKeyDown Evento
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Ocorre antes do KeyDown evento, quando uma tecla é pressionada enquanto o foco está neste controlo.
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
Exemplos
O exemplo de código seguinte demonstra um Button que inclui um ContextMenuStrip. Quando tem Button o foco e pressionas as teclas SETA PARA CIMA ou SETA PARA BAIXO, aparece.ContextMenuStrip O PreviewKeyDown gestor de eventos deteta quando as teclas SETA PARA CIMA ou SETA PARA BAIXO são pressionadas e define a IsInputKey propriedade para true. Isto eleva o KeyDown evento para que possa mostrar o ContextMenuStrip. Não deve colocar qualquer lógica no PreviewKeyDown gestor de eventos, exceto definir a IsInputKey propriedade. Em vez disso, deves colocar a tua lógica no KeyDown gestor 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
Observações
Alguns pressionamentos de teclas, como as teclas TAB, RETURN, ESC e setas, são normalmente ignorados por alguns controlos porque não são considerados pressionamentos de teclas de entrada. Por exemplo, por defeito, um Button controlo ignora as teclas de seta. Pressionar as setas normalmente faz com que o foco passe para o controlo anterior ou seguinte. As setas são consideradas teclas de navegação e pressionar estas teclas normalmente não aumenta o KeyDown evento para um Button. No entanto, pressionar as setas para um Button aumenta o PreviewKeyDown evento. Ao tratar o PreviewKeyDown evento para a Button e definir a IsInputKey propriedade para true, pode aumentar o KeyDown evento quando as setas são pressionadas. No entanto, se manuseares nas setas, o foco deixa de se mover para o controlo anterior ou próximo.
Para obter mais informações sobre como manipular eventos, consulte Manipulando e gerando eventos.