2009-01-14 14 views
2

J'ai un contrôle avec une fonction d'annulation, lorsque l'utilisateur appuie sur Échap, le contrôle rétablit la valeur d'origine.Comment autoriser mon contrôle à détecter la clé d'échappement avant que le contrôle DataGridView ferme mon contrôle?

Le problème est lorsque j'ai intégré mon contrôle à DataGridView. Le DataGridView "mange" la touche Echap, par conséquent mon contrôle ne peut pas détecter la touche Echap. Lorsque j'ai mis "return true" sur EditingControlWantsInputKey, mon contrôle a pu détecter la touche Escape, mais d'autres problèmes sont apparus, le DataGridView ne peut pas fermer mon contrôle, il reste en mode Edit. Comment autoriser mon contrôle à détecter la touche Echap tout en permettant à DataGridView de fermer mon contrôle?

Répondre

2

J'ai été capable de résoudre mon propre problème. J'ai fait la Annuler méthode de mon LookupBox publique, puis sur mon contrôle DataGridView (classe DgvLookupBoxEditingControl: LookupBox, IDataGridViewEditingControl), je mets le code suivant:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if (keyData == Keys.Escape)    
      this.Undo();    

     return base.ProcessCmdKey(ref msg, keyData); 


    } 
0

Vous devez "renvoyer true" uniquement lorsque Keys.KeyCode == Keys.Escape;
sinon retourner ! DataGridViewWantsInputKey.

+0

J'ai essayé cela, mais cela n'a pas fonctionné. C'est alors mon contrôle qui mange la clé, par conséquent DataGridView ne peut pas fermer mon contrôle. –

0

Ou vous pouvez ajouter gestionnaire PreviewKeyDown à votre contrôle d'édition et de détecter Escape là.

  dataGridView1.EditingControlShowing += (o, e) => { 

      if(e.Control is DataGridViewTextBoxEditingControl) 
      {     
       var editBox = e.Control as DataGridViewTextBoxEditingControl; 
       editBox.PreviewKeyDown += KeyPressHandler; 
      }