ID do artigo: 320584 - Última revisão: segunda-feira, 11 de dezembro de 2006 - Revisão: 2.4

Como interceptar pressionamentos de teclas em controles usando translation from VPE for Csharp Visual

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

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. Essa técnica não captura a tecla Print Screen. 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 tiver sido atribuído para 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 é 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 o DataGrid é o controle para o qual esse recurso é solicitado com mais freqüência. Você pode usar a mesma abordagem com outros controles .NET.

Configurar a interceptação de chave

Para interceptar pressionamentos de teclas em um controle Windows Forms, você deve derivar uma nova classe é baseada na classe do controle que você deseja, e você substituir 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 : System.Windows.Forms.DataGrid
{
   protected override bool ProcessCmdKey(ref Message msg, Keys keyData)	
   {
   }
}	
				

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 as combinações de pressionamento de tecla incluem teclas de controle (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 int WM_KEYDOWN = 0x100;
const int WM_SYSKEYDOWN = 0x104;
   
if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
{
   switch(keyData)
      {
         case Keys.Down:
            Console.WriteLine("Down Arrow Captured");
            break;
      
         case Keys.Up:
            Console.WriteLine("Up Arrow Captured");
            break;
 
         case Keys.Tab:
            Console.WriteLine("Tab Key Captured");
            break;
 
         case Keys.Control | Keys.M:
            Console.WriteLine("<CTRL> + m Captured");
            break;
 
         case Keys.Alt | Keys.Z:
            Console.WriteLine("<ALT> + z Captured");
            break;
      }
}
				

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 translation from VPE for Csharp Visual.
  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
    public class MyDataGrid : System.Windows.Forms.UserControl
    					
    à seguinte:
    public class MyDataGrid : System.Windows.Forms.DataGrid
    					Note In Visual Studio 2005 or Visual Studio 2008, change the following line of code: 
    public partial class MyDataGrid : System.Windows.Forms.DataGrid 
  4. Adicione o seguinte método à classe MyDataGrid :
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)	
    {
       const int WM_KEYDOWN = 0x100;
       const int WM_SYSKEYDOWN = 0x104;
    
       if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
       {
          switch(keyData)
          {
             case Keys.Down:
                this.Parent.Text="Down Arrow Captured";
                break;
          
             case Keys.Up:
                this.Parent.Text="Up Arrow Captured";
                break;
     
             case Keys.Tab:
                this.Parent.Text="Tab Key Captured";
                break;
     
             case Keys.Control | Keys.M:
                this.Parent.Text="<CTRL> + M Captured";
                break;
     
             case Keys.Alt | Keys.Z:
                this.Parent.Text="<ALT> + Z Captured";
                break;
          }				
       }
    
       return base.ProcessCmdKey(ref msg,keyData);
    }
    					
  5. Crie o projeto.
  6. Crie um novo projeto Windows Application translation from VPE for Csharp Visual. Por padrão, um formulário que é denominado Form1 é criado.
  7. No menu Ferramentas , clique em Customize Toolbox

    Observação No Visual Studio 2005 ou Visual Studio 2008, clique em Choose Toolbox Items .
  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.
    // This structure is only used in providing sample data for the grid.
    public struct gridData
    {
       private string make;
       private int year;
    
       public gridData(string n,int y)
       {
          make=n;
          year=y;
       }
    
       public string Make
       {
          get{return make;}
          set{make = value;}
       }
    
       public int Year
       {
          get{return year;}
          set{year=value;}
       }
    }
    					
  12. Adicione o seguinte código à classe formulário, imediatamente após a seção "Windows Form Designer gerou código":
    protected gridData[] dataArray=new gridData[5];
    					
  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.

A informação contida neste artigo aplica-se a:
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# 2008 Express Edition
Palavras-chave: 
kbmt kbhowtomaster KB320584 KbMtpt
Tradução automáticaTradução automática
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: 320584  (http://support.microsoft.com/kb/320584/en-us/ )