es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Manejo de eventos de teclado para el tipo de columna personalizado DataGridView.

En el código a continuación, estoy extendiendo la clase DataGridViewTextBoxCell para controlar los valores que el usuario introducirá en este campo, para eso necesito capturar el evento KeyDown. Pero el evento solo se invoca cuando navego en la DGV utilizando el teclado. Cuando estoy editando el valor de la celda, el evento no ocurre. ¿Qué falta en mi código?

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        DataGridView dataGridView = new DataGridView();

        MyDataGridViewColumn col = new MyDataGridViewColumn();
        dataGridView.Columns.Add(col);
        dataGridView.Rows.Add(new string[] { "0" });
        dataGridView.Rows.Add(new string[] { "1" });
        dataGridView.Rows.Add(new string[] { "2" });
        dataGridView.Rows.Add(new string[] { "3" });

        this.panel1.Controls.Add(dataGridView);
    }
}

public class MyDataGridViewColumn : DataGridViewColumn
{
    public MyDataGridViewColumn()
    {
        this.CellTemplate = new MyDataGridViewTextBoxCell();
    }
}

public class MyDataGridViewTextBoxCell : DataGridViewTextBoxCell
{
    protected override void OnKeyDown(KeyEventArgs e, int rowIndex)
    {
        base.OnKeyDown(e, rowIndex);

        var key = e.KeyCode;
    }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para capturar el evento KeyDown mientras se edita el valor de la celda, es necesario anular el método OnKeyPress además del método OnKeyDown. El método OnKeyPress se invoca para cada pulsación de tecla realizada mientras se edita la celda. Por lo tanto, agregue el siguiente bloque de código dentro de la clase MyDataGridViewTextBoxCell:

    protected override void OnKeyPress(KeyPressEventArgs e, int rowIndex)
    {
        base.OnKeyPress(e, rowIndex);
    
        var key = e.KeyChar;
    }
    

    Esto capturará los eventos KeyPress mientras se edita la celda junto con los eventos KeyDown mientras se navega con el teclado.

Comments are closed.