Cada vez que una la celda está en modo de edición, su control alojado está recibiendo el evento KeyDown
en lugar del padre DataGridView
que lo contiene. Es por eso que su método abreviado de teclado funciona cuando una celda no está en modo de edición (incluso si está seleccionada), porque su control DataGridView
recibe el evento KeyDown
. Sin embargo, cuando se encuentra en el modo de edición, el control de edición que contiene la celda recibe el evento y no sucede nada porque no tiene asociada su rutina de controlador personalizado.
he pasado demasiado tiempo retocando el DataGridView
control estándar para manejar editar compromete a la forma que yo quiero, y yo encontrado que la forma más fácil de conseguir alrededor de este fenómeno es como subclase del control existente DataGridView
y anulando su ProcessCmdKey
function. Cualquier código personalizado que ingrese aquí se ejecutará cada vez que se presione una tecla en la parte superior de DataGridView
, independientemente de si está o no en modo de edición.
Por ejemplo, se podría hacer algo como esto:
class MyDataGridView : System.Windows.Forms.DataGridView
{
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
MessageBox.Show("Key Press Detected");
if ((keyData == (Keys.Alt | Keys.S)))
{
//Save data
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
Véase también relacionada, aunque algo mayor, el artículo: How to trap keystrokes in controls by using Visual C#
¿No está activado o el código no se ejecutó correctamente? ¿Puedes explicar más sobre lo que estás haciendo? – Rox
partes de algunas respuestas en este enlace están un poco relacionadas- http://stackoverflow.com/questions/686309/datagridview-change-edit-control-size-while-editing/23703744 – barlop