2009-10-13 7 views
3

Mon contrôle ActiveX contient différentes formes qui sont dessinées. CTRL-A est utilisé dans le contrôle pour sélectionner tous les objets. De même, CTRL-C pour copier, CTRL-V pour coller, etc.Envoi de séquences de touches à contrôler dans .Net

Cependant, lorsque j'insère ce contrôle dans un formulaire Windows dans une application .Net, il ne reçoit pas ces événements de clavier. J'ai essayé d'ajouter un événement PreviewKey, ce qui permet d'envoyer certaines frappes par ex. TAB, mais pas ces touches modifiées.

Est-ce que quelqu'un sait comment rediriger des frappes modifiées à un contrôle d'utilisateur?

Merci.

Répondre

0

Vous devez intercepter les clés et remplacer la méthode ProcessCmdKey.

class MyDataGrid : System.Windows.Forms.DataGrid 

    { 
     protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
     { 
      ........... 

     } 
    } 

http://support.microsoft.com/kb/320584

0

KeyPreview est juste la mauvaise méthode. Essayez d'utiliser KeyUp ou KeyDown, comme ceci:

 private void ControlKeyTestForm_KeyUp(object sender, KeyEventArgs e) 
     { 
      if (e.Control && e.KeyCode == Keys.A) 
       this.label1.Text = "Ctrl+A pressed"; 
     } 

Si vous voulez que le formulaire contenant pour traiter les touches de raccourci se rappeler de définir la propriété KeyPreview sur le formulaire à true cochés alors les gestionnaires KeyDown ou KeyUp sous forme.

1

Il est possible que le contrôle ActiveX n'ait pas de focus et ne reçoive donc pas les événements de clé. Vous souhaiterez peut-être gérer les événements de clé au niveau du formulaire, puis appelez les méthodes appropriées sur votre contrôle ActiveX. Si vous définissez la propriété KeyPreview de votre formulaire sur true votre formulaire recevra les événements clés pour tous les contrôles sur le formulaire. De cette façon, vos raccourcis devraient fonctionner quel que soit le contrôle en cours. Voici un exemple rapide avec lequel vous pouvez jouer pour tester cela. Créer un nouveau formulaire avec plusieurs contrôles différents sur et modifier le code comme ceci:

public Form1() 
{ 
    InitializeComponent(); 

    KeyPreview = true; // indicates that key events for controls on the form 
         // should be registered with the form 

    KeyUp += new KeyEventHandler(Form1_KeyUp); 
} 

void Form1_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.Modifiers == Keys.Control) 
    { 
     switch (e.KeyCode) 
     { 
      case Keys.A: 
       MessageBox.Show("Ctrl + A was pressed!"); 
       // activeXControl.SelectAll(); 
       break; 
      case Keys.C: 
       MessageBox.Show("Ctrl + C was pressed!"); 
       // activeXControl.Copy(); 
       break; 
      case Keys.V: 
       MessageBox.Show("Ctrl + V was pressed!"); 
       // activeXControl.Paste(); 
       break; 
     } 
    } 
} 

Peu importe ce que le contrôle a le focus lorsque vous entrez les combinaisons de touches, Form1_KeyUp de votre formulaire méthode sera appelée à gérer.

Questions connexes