teclas tecla presionada keys keypresseventargs detectar codigo c# winforms datagridview keypress keyboard-events

tecla - keys c#



Usar+(más) y-(menos) teclas del teclado como incrementos y decrementadores en un DataGridView (3)

¿Has probado con esto?

en lugar de usar esto: Keys.OemMinus usa esto: Keys.Stract

y en lugar de usar esto: Keys.Oemplus usa esto: Keys.Add

En una aplicación de WinForms que estoy escribiendo en C #, tengo un DataGridViewTextBoxColumn con celdas que contienen valores enteros que me gustaría que los usuarios puedan incrementar o disminuir usando las teclas + y - de sus teclados.

He manejado el evento KeyDown ya que es lo que uso generalmente para manejar las teclas Eliminar, etc., pero no funciona para las teclas Más y Menos ya que presionarlas hace que la celda entre en modo Edición, y el evento KeyDown es nunca se disparó por esas llaves como resultado. Lo mismo para el evento KeyPress

En realidad, se dispara si configuro las celdas de solo lectura, pero no estoy contento con esta solución, ya que me obligaría a establecer la propiedad de verdadera a falsa en varias áreas de mi código y podría desordenarse rápidamente.

¿Cuál sería la mejor manera de lograr esto?

Gracias.



Wow, ese artículo de KB es bastante malo. Eso debe hacerse anulando IsInputKey ().

No me importa mucho DGV, es un error personalizarlo. Pero probablemente puedas golpear esto en algún tipo de forma:

using System; using System.Windows.Forms; class MyDgv : DataGridView { public event EventHandler Increment; public event EventHandler Decrement; protected override void OnKeyDown(KeyEventArgs e) { bool used = false; if (this.EditingControl == null) { if (e.KeyData == Keys.Oemplus) { if (Increment != null) { Increment(this, EventArgs.Empty); used = true; } } else if (e.KeyData == Keys.OemMinus) { if (Decrement != null) { Decrement(this, EventArgs.Empty); used = true; } } } if (used) e.SuppressKeyPress = e.Handled = true; else base.OnKeyDown(e); } }