Artigo: 320584 - Última revisão: segunda-feira, 11 de Dezembro de 2006 - Revisão: 2.4

Como aplicar um véu batimentos de tecla em controlos utilizando o Visual C#

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 | Reduzir tudo

Sumário

Este artigo passo a passo demonstra como aplicar um véu batimentos de teclas nos controlos de formulários do Windows. Utilizando o código de exemplo neste artigo, pode interceptar praticamente qualquer combinação de teclas individual. Também pode interceptar combinações de teclas, incluindo as teclas CTRL e ALT. Esta técnica não capturar a tecla PRINT SCREEN. Além disso, alguns batimentos de teclas do teclado com chaves adicionais, tais como teclas que controlam a um Web browser ou um leitor de CD-ROM, não podem ser capturados.

Para a maioria dos casos, os eventos PremirATecla , TeclaEmBaixo e TeclaEmCima padrão são suficiente para capturar e processar combinações de teclas. No entanto, nem todos os controlos de aumentar estes eventos para todos os batimentos de tecla em todas as condições.

Por exemplo, considere o controlo DataGrid : Se não existem dados tem sido atribuídos para a grelha, as teclas de seta (seta para a esquerda, seta para a direita, seta para cima e seta para baixo) aumentar apenas o evento TeclaEmCima . Outras teclas, como A ou 4, aumentar todos os três eventos. Se a DataGrid estiver actualmente a apresentar dados, nenhum dos eventos de teclado padrão é são desencadeado as teclas de navegação. Batimentos de teclas, tais como A 4 não eventos, aumentar apenas TeclaEmCima ou aumentar todos os três eventos, consoante o que é seleccionado no controlo. Nestas situações, pode seguir os passos descritos neste artigo para capturar batimentos de teclas, independentemente do estado do controlo.

Os exemplos de código neste artigo são escritos trabalhar com a DataGrid , uma vez que a DataGrid é o controlo para o qual esta funcionalidade é frequentemente pedida. Pode utilizar a mesma abordagem com outros controlos .NET.

Configurar traps chave

Para aplicar véus batimentos de teclas num controlo Windows Forms, tem de derivar uma nova classe baseia-se a classe do controlo que pretende e substitua o método de ProcessCmdKey . Neste método substituído, irá colocar o código para processar os batimentos de teclas que pretende aplicar um véu. O código de exemplo seguinte é um exemplo da estrutura básica para essa 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 do Windows, como, por exemplo, WM_KEYDOWN. O parâmetro keyData contém o código chave da chave que foi premido. Se também foi premido CTRL ou ALT, o parâmetro keyData contém as informações de ModifierKey.

Não é obrigatório utilizar o parâmetro de msg ; pode ignorá-la. Recomenda-se, no entanto, para testar a mensagem. Neste exemplo, teste WM_KEYDOWN para verificar que este é um evento de batimento de tecla. Também testar WM_SYSKEYDOWN, para que seja possível detectar combinações de teclas que incluam chaves de controlo (principalmente ALT e CTRL).

Para aplicar véus teclas específicas, pode avaliar o keyCode, comparando-à enumeração de chaves . O código de exemplo seguinte demonstra como detectar 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 seguinte mostra como aplicar um véu batimentos de tecla com o controlo DataGrid .
  1. Crie um novo projecto de biblioteca de controlo do Windows no Visual C#.
  2. Visualize as propriedades para a classe UserControl1 e, em seguida, altere o nome para MyDataGrid .
  3. Visualizar o código para a biblioteca de controlos e, em seguida, 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 projecto.
  6. Crie um novo projecto de aplicação do Windows no Visual C#. Por predefinição, é criado um formulário é denominado Form1.
  7. No menu Ferramentas , clique em Personalizar a caixa de ferramentas

    Nota No Visual Studio 2005 ou o Visual Studio 2008, clique em Seleccionar itens de caixa de ferramentas .
  8. Clique no separador de .NET Framework Components .
  9. Clique em Procurar , localizar o controlo/DLL que foi criada e, em seguida, clique em OK .
  10. O controlo MyDataGrid aparece agora na caixa de ferramentas. Coloque um no Form1. Nota : pode utilizar o código dos restantes passos para criar dados de exemplo para a grelha apresentar.

  11. Adicione o seguinte código ao espaço de nomes do formulário. Pode colocar o código antes ou depois da 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. Adicionar o seguinte código à classe de formulário, imediatamente a seguir a secção "Windows formulário Designer gerado código":
    protected gridData[] dataArray=new gridData[5];
    					
  13. Adicione o seguinte código ao evento carregar 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 o exemplo e tente várias combinações de teclas que estão a ser trapped (seta para cima, seta para baixo, TAB, CTRL + M e ALT + Z). A legenda do formulário é actualizada para mostrar os batimentos de teclas foi premido.

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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )