Tengo un DataGridView que está configurado en EditOnF2. Realizo un procesamiento especial de datos en el controlador de eventos CellEndEdit que establece el valor de la celda. Todavía quiero la funcionalidad de EditOnKeystrokeOrF2 de volver al valor original cuando se presiona la tecla Esc. Desafortunadamente, en el controlador de eventos CellEndEdit, no veo una forma de decir qué causó que se desencadenara el evento CellEndEdit. Solo quiero cambiar el valor de la celda si no se presiona la tecla Esc. ¿Cómo puedo saber si fue o no?¿Cómo puedo capturar la pulsación de tecla que desencadena "CellEndEdit" en un DataGridView en C#?
Editar: Vale la pena señalar que el evento KeyDown no se dispara cuando la celda se está editando, ni para la última pulsación de tecla de finalización.
Edit2: He intentado con la sugerencia de KeyPreview, pero el formulario aún no captura la tecla Escape que se está presionando.
Edit3: He estado experimentando tratando de hacer que esto funcione. Originalmente publiqué algunos de los siguientes como publicaciones por separado, pero creo que podría ser más relevante incluirlos aquí.
Tengo una celda en un DataGridView que ahora está configurado como EditProgrammatically. Para capturar la pulsación de tecla que inicia una edición, estoy configurando la celda.Valor igual a la pulsación de tecla. Sin embargo, esto arruina la funcionalidad "Escape" de la celda: cuando presiona "escape", en lugar de volver al valor original, vuelve a la combinación de teclas que programáticamente inserté en la celda.
Creo que si pudiera establecer el "EditedFormattedValue" en una celda, aquí sería donde quiero poner mi valor de pulsación de tecla, sin embargo, esto parece ser de solo lectura. ¿Cómo puedo lograr lo que estoy intentando?
Un ejemplo para aclarar: si la celda tiene un valor de "54.3" en ella, y presiono la tecla "9", comienza a editar la celda y coloca un "9" allí. Si presiono Escape, en lugar de volver a "54.3", vuelve a "9". Lo que quiero es que vuelva a su valor original de "54.3".
Por lo tanto, estoy tratando de abordar este problema tanto desde el principio como desde el final. Creo que el verdadero problema es que estoy sobrescribiendo el valor original y no tengo forma de determinar si debo revertirlo o no.
Edit4: Parece que valdría la pena utilizar CellValidating, pero estoy experimentando un comportamiento extraño cuando experimento con él. En un nuevo proyecto, creo DataGridView y me registro para los diversos eventos y veo que CellValidating se activa antes de CellEndEdit. Sin embargo, en mi proyecto en el que trato de hacer que esto funcione, CellEndEdit se activa ANTES de CellValidating. ¿Alguna idea sobre cuál podría ser la diferencia?
Gracias, pero después de probar esto, parece que la tecla de escape es todavía solo está siendo reconocido por la célula como el final de la edición y no como un evento KeyDown o KeyPress real en el formulario. –