Je hébergement un contrôle d'édition personnalisée dans un DataGridView
, qui, pour l'enregistrement est un TextBox
et Button
ensemble dans un UserControl
. J'ai hérité de DataGridViewColumn
pour la nouvelle colonne et DataGridViewTextBoxCell
pour la nouvelle cellule.Capturer premier caractère en entrant dans le mode d'édition - le contrôle d'édition personnalisé dans DataGridView
Avec un DataGridViewTextBoxCell
normal, si vous appuyez sur une touche lorsque la cellule est mise au point, il va commencer le mode d'édition et le caractère que vous avez saisi apparaîtra dans la TextBoxEditingControl
. Cependant, dans ma cellule héritée, aucune valeur n'est transmise sur keypress. (En fait, vous devez passer manuellement la valeur actuelle de la cellule dans InitializeEditingControl
ou rien ne s'affichera.) Ainsi, le premier caractère que vous tapez (celui qui commence le mode d'édition) est perdu.
J'ai essayé OnKeyPress
, OnKeyDown
et OnKeyUp
dans le DataGridViewCell
mais ils ne sont jamais appelés. KeyEntersEditMode
, cependant, semble être appelé, et seulement quand il vérifie contre une touche enfoncée, donc c'est peut-être un bon point de départ. Le problème devient alors comment traduire un KeyEventArgs à un char
. Ceci est trivial pour l'alphabet et les nombres, mais comme tous les claviers ne sont pas créés égaux, la manipulation d'autres touches est compliquée et compliquée au mieux. S'il y a un convertisseur qui le fera automatiquement, s'il vous plaît éclairez-moi.
Est-ce que quelqu'un d'autre a rencontré ce problème ou trouvé une bonne solution de contournement?
Remarque: Ce problème s'applique lorsque EditMode
est défini sur une variante de EditOnKeystroke
. Définir à EditOnEnter
est une solution de contournement valide pour mon projet, mais je voudrais également émuler le comportement par défaut du TextBoxEditingControl
.
Le contrôle UserControl obtient-il la touche transmise à partir de DataGridView? –