J'ai un DataGridView qui est défini sur EditOnF2. Je fais un traitement spécial des données dans le gestionnaire d'événements CellEndEdit qui définit la valeur de la cellule. Je veux toujours la fonctionnalité de l'EditOnKeystrokeOrF2 de revenir à la valeur d'origine lorsque la touche Esc est enfoncée. Malheureusement, dans le gestionnaire d'événements CellEndEdit, je ne vois pas de moyen de dire ce qui a provoqué le déclenchement de l'événement CellEndEdit. Je veux seulement changer la valeur de la cellule si la touche Esc n'est pas pressée. Comment puis-je savoir si c'était le cas ou non?Comment puis-je capturer la frappe qui déclenche "CellEndEdit" sur un DataGridView en C#?
Éditer: Il est à noter que l'événement KeyDown n'est pas déclenché lorsque la cellule est en cours d'édition, ni pour la fin de la séquence de touches. Edit2: J'ai essayé la suggestion KeyPreview, mais le formulaire ne capture toujours pas la touche Echap appuyée. Edit3: J'ai expérimenté avec essayant de faire fonctionner ceci. À l'origine, j'ai publié certains des articles suivants dans un article distinct, mais je pense qu'il serait peut-être plus pertinent de les inclure ici.
J'ai une cellule dans un DataGridView qui est maintenant défini sur EditProgrammatically. Pour capturer la frappe qui commence une édition, je mets le cell.Value égal à la frappe. Cependant, cela ruine la fonctionnalité "Echap" de la cellule - lorsque vous appuyez sur Echap, au lieu de revenir à la valeur d'origine, elle revient à la frappe que j'ai insérée par programme dans la cellule.
Je crois que si je pouvais définir le "EditedFormattedValue" sur une cellule, ce serait là où je veux mettre ma valeur de frappe, mais cela semble être en lecture seule. Comment puis-je accomplir ce que je tente?
Un exemple à clarifier: Si la cellule a une valeur de "54.3" dans celle-ci, et que j'appuie sur la touche "9", elle commence à éditer la cellule et y place un "9". Si j'appuie sur Escape, au lieu de revenir à "54.3", il revient à "9". Ce que je veux, c'est qu'il revienne à sa valeur d'origine de "54,3". Donc, j'essaie d'aborder ce problème à la fois du début et de la fin. Je pense que le vrai problème est que je suis en train d'écraser la valeur d'origine et que je n'ai aucun moyen de déterminer si je devrais la rétablir ou non. Edit4: Il semble que CellValidating puisse être utile, mais je vois un comportement étrange quand je l'expérimente. Dans un nouveau projet, je crée le DataGridView et m'enregistre pour les divers événements et vois que CellValidating est déclenché avant le CellEndEdit. Cependant, dans mon projet où j'essaye de faire fonctionner ceci, CellEndEdit tire AVANT CellValidating. Des idées sur ce que la différence pourrait être?
Merci, mais après avoir essayé cela, il semble que la clé d'échappement est toujours être reconnu par la cellule comme la fin de l'édition et non comme un événement KeyDown ou KeyPress réel sur le formulaire. –