Você está offline; aguardando reconexão

Controla como interceptar pressionamentos de teclas no .NET usando o Visual Basic .NET ou Visual Basic 2005

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 320583
Para obter uma Microsoft Visual translation from VPE for Csharp .NET versão deste artigo, consulte 320584.

NESTA TAREFA

Sumário
Este artigo passo a passo demonstra como interceptar pressionamentos de teclas em controles Windows Forms. Usando o código de exemplo neste artigo, você pode interceptar praticamente qualquer pressionamento de tecla individual. Você também pode interceptar combinações de teclas, incluindo CTRL e ALT. A tecla Print Screen não é afetada por essa técnica. Além disso, alguns pressionamentos de teclas de teclados com chaves adicionais, como chaves que controlam um navegador da Web ou um player de CD-ROM, não podem ser capturados.

Para a maioria dos fins, os eventos de KeyPress , KeyDown e KeyUp padrão são suficientes para capturar e manipular pressionamentos de teclas. No entanto, não todos os controles aumentam esses eventos para todos os pressionamentos de teclas em todas as condições.

Por exemplo, considere o controle DataGrid : se nenhum dado foi atribuído a grade, as teclas de direção (esquerda, direita, seta para cima e seta para baixo) gerar somente o evento KeyUp . Outras teclas, como A ou 4, aumentar todos os três eventos. Se o DataGrid no momento é exibir dados, nenhum dos eventos de teclado padrão são disparados para as teclas de navegação. Pressionamentos de teclas, como A 4 não eventos, elevar somente KeyUp ou disparar eventos todas as três, dependendo do que no momento é selecionado no controle. Nessas situações, você pode seguir as etapas neste artigo para capturar pressionamentos de teclas, independentemente do estado do controle.

Os exemplos de código neste artigo são gravados para trabalhar com DataGrid , porque este é o controle para o qual esse recurso é solicitado com mais freqüência. Você pode usar essa mesma abordagem com outros .NET controles.

Back to the top

Configurar a interceptação de chave

Para interceptar pressionamentos de teclas em um controle Windows Forms, você deriva uma nova classe é baseada na classe do controle que você deseja. Substitua o método ProcessCmdKey . Este método substituído, você colocará o código para processar o pressionamento de teclas que você deseja ajustar o registro. O código de exemplo a seguir é um exemplo da estrutura básica de como uma classe:
Class MyDataGrid    Inherits DataGrid    Protected Overrides Function ProcessCmdKey( _        ByRef msg As Message, _        ByVal keyData As Keys _                                ) As Boolean            End FunctionEnd Class					
Back to the top

Implementar o método substituído

O sistema passa dois parâmetros para o método ProcessCmdKey : msg e keyData . O parâmetro de msg contém a mensagem de Windows, como WM_KEYDOWN. O parâmetro keyData contém o código da chave que foi pressionado. Se CTRL ou ALT estava pressionada também, o parâmetro keyData contém as informações de ModifierKey.

Usando o parâmetro de msg não é obrigatória; você pode ignorá-la. É recomendável, no entanto, para testar a mensagem. Neste exemplo, você testar WM_KEYDOWN para verificar que este é um evento de pressionamento de tecla. Você também testar WM_SYSKEYDOWN, para que seja possível capturar combinações de pressionamento de tecla que envolvem controle chaves (principalmente ALT e CTRL).

Para interceptar a teclas específicas, você pode avaliar o keyCode, comparando-a enumeração de Keys . O seguinte exemplo de código demonstra como capturar as teclas seta para cima, seta para baixo, TAB, CTRL+M e ALT + Z:
Const WM_KEYDOWN As Integer = &H100Const WM_SYSKEYDOWN As Integer = &H104If ((msg.Msg = WM_KEYDOWN) Or (msg.Msg = WM_SYSKEYDOWN)) Then   Select Case (keyData)      Case Keys.Down         Console.WriteLine("Down Arrow Captured")      Case Keys.Up         Console.WriteLine("Up Arrow Captured")      Case Keys.Tab         Console.WriteLine("Tab Key Captured")      Case (Keys.Control Or Keys.M)         Console.WriteLine("<CTRL> + m Captured")      Case (Keys.Alt Or Keys.Z)         Console.WriteLine("<ALT> + z Captured")    End SelectEnd If				
Back to the top

Criar um exemplo

O exemplo a seguir mostra como interceptar pressionamentos de tecla com o controle DataGrid .
  1. Crie um novo projeto Windows Control Library no Visual Basic .NET ou no Visual Basic 2005.
  2. Exibir as propriedades para a classe UserControl1 e, em seguida, altere o nome para MyDataGrid .
  3. Exibir o código para a biblioteca de controle e altere a seguinte linha de código
    Inherits System.Windows.Forms.UserControl					
    à seguinte:
    Inherits System.Windows.Forms.DataGrid					
  4. Adicione o seguinte método à classe MyDataGrid :
    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, _                           ByVal keyData As Keys) As Boolean   Const WM_KEYDOWN As Integer = &H100   Const WM_SYSKEYDOWN As Integer = &H104   If ((msg.Msg = WM_KEYDOWN) Or (msg.Msg = WM_SYSKEYDOWN)) Then      Select Case (keyData)         Case Keys.Down            Me.Parent.Text = "Down Arrow Captured"         Case Keys.Up            Me.Parent.Text = "Up Arrow Captured"         Case Keys.Tab            Me.Parent.Text = "Tab Key Captured"         Case (Keys.Control Or Keys.M)            Me.Parent.Text = "<CTRL> + M Captured"         Case (Keys.Alt Or Keys.Z)            Me.Parent.Text = "<ALT> + Z Captured"      End Select   End If   Return MyBase.ProcessCmdKey(msg, keyData)End Function					
  5. Crie o projeto.
  6. Crie um novo projeto Windows Application no Visual Basic .NET ou no Visual Basic 2005. Por padrão, é criado o Form1.

    Observação Você deve alterar o código no Visual Basic 2005. Por padrão, o Visual Basic cria dois arquivos para o projeto quando você cria um Windows Forms projeto. Se o formulário é denominado Form1, os dois arquivos que representam o formulário são chamados de Form1.vb e Form1.Designer.vb. Escreva o código no arquivo Form1.vb. O Windows Forms Designer escreve o código no arquivo Form1.Designer.vb. O Windows Forms Designer usa a palavra-chave partial para dividir a implementação de Form1 em dois arquivos separados. Esse comportamento impede que o código gerado pelo designer sendo intercaladas com seu código.

    Para obter mais informações sobre os novos aprimoramentos linguagem Visual Basic 2005, visite o seguinte site da Web Microsoft Developer Network (MSDN): Para obter mais informações sobre classes parciais e o Windows Forms Designer, visite o seguinte site da MSDN:
  7. No menu Ferramentas , clique em Customize Toolbox .
  8. Clique na guia .NET Framework Components .
  9. Clique em Procurar , localizar o controle/DLL que foi criada apenas e, em seguida, clique em OK .
  10. O controle MyDataGrid agora aparece na caixa de ferramentas. Colocar um em Form1. Observação : você pode usar o código em etapas restantes para criar dados de exemplo para a grade para exibir.

  11. Adicione o seguinte código ao espaço para nome do formulário. Você pode colocar o código antes ou após a definição de classe de formulário.
    ' Structure is to provide sample data for the example.Public Structure gridData    Private mmake As String    Private myear As Integer    Public Sub New(ByVal n As String, ByVal y As Integer)        mmake = n        myear = y    End Sub    Public Property Make() As String        Get            Return mmake        End Get        Set(ByVal Value As String)            Make = Value        End Set    End Property    Public Property Year() As Integer        Get            Return myear        End Get        Set(ByVal Value As Integer)            myear = Value        End Set    End PropertyEnd Structure					
  12. Adicione o seguinte código à classe formulário imediatamente após a seção "Windows Form Designer gerou código":
    protected dataArray(5) As gridData					
  13. Adicione o seguinte código ao evento Load do Form1:
    ' Create some sample data.dataArray(0) = New gridData("ford", 1999)dataArray(1) = New gridData("chevrolet", 1999)dataArray(2) = New gridData("plymouth", 1988)dataArray(3) = New gridData("honda", 1999)dataArray(4) = New gridData("fiat", 1987)' Assign the data to the grid.MyDataGrid1.DataSource = dataArray					
  14. Executar a amostra e tente vários pressionamentos de teclas que estão sendo trapped (seta para cima, seta para baixo, TAB, CTRL+M e ALT + Z). A legenda do formulário é atualizada para mostrar qual tecla foi pressionada.
Back to the top

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 320583 - Última Revisão: 05/11/2007 07:08:50 - Revisão: 3.7

Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic 2005

  • kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB320583 KbMtpt
Comentários
m=document.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?">