2010-04-16 2 views
0

Il semble que la seule façon de capturer les événements de touche dans une cellule d'un contrôle DataGridView afin de valider l'entrée utilisateur comme ils tapent, est d'utiliser les contrôles DataGridView événement OnEditControlShowing, brancher une méthode pour (l'e du contrôle d'édition. Control) keypress event et faire une validation.Comment puis-je valider l'entrée pour le contrôle d'édition d'une cellule dans un DataGridView?

Mon problème est que je l'ai construit un tas de classes de colonne DataGridView personnalisée, avec leurs propres types de cellules sur mesure. Je veux faire une validation numérique pour les cellules qui ont des champs de texte numériques comme contrôles d'édition mais pas tous les autres types de cellules. Ces cellules ont leurs propres contrôles d'édition personnalisés. .

Comment puis-je déterminer, dans le contrôle "OnEditControlShowing" de DataGridView, si un contrôle d'édition particulier nécessite ou non une validation numérique?

Répondre

1

Si je comprends bien votre question, vous voulez choisir de câbler un événement basé sur le type du contrôle d'édition. Si oui, ce que je ferais:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     //Remove any KeyPress events already attached 
     e.Control.KeyPress -= new KeyPressEventHandler(FirstEditingControl_KeyPress); 
     e.Control.KeyPress -= new KeyPressEventHandler(SecondEditingControl_KeyPress); 

     //Choose event to wire based on control type 
     if (e.Control is NumericTextBox) 
     { 
      e.Control.KeyPress += new KeyPressEventHandler(FirstEditingControl_KeyPress); 
     } else if (e.Control is CurrencyTextBox) 
     { 
      e.Control.KeyPress += new KeyPressEventHandler(SecondEditingControl_KeyPress); 
     } 
    } 

Je l'ai appris de l'expérience à tous les événements possibles décabler sur les contrôles d'édition dans DataGridView de, car ils réutilisent le même contrôle pour plusieurs cellules.

+0

Je pensais que cela aussi, mais il semble que le contrôle d'édition est toujours de type DataGridViewTextBoxEditingControl ?? –

Questions connexes