DataGrid Personalizado
Creando un control personalizado para la captura de las teclas presionadas por el Usuario.

Fecha: 07/Nov/2004 (06/11/04)
Autor: David Sabo W. ([email protected])

 


    La mayor�a de las aplicaciones que desarrollamos requieren que el Control DataGrid pueda ejecutar una acci�n cuando presionamos una tecla, lo m�s com�n es que seleccione y procese una fila seleccionada al presionar la tecla [Enter]. Una caracter�stica que cualquier aplicaci�n desarrollada bajo el ambiente Windows deber�a tener.

    Esta caracter�stica nos es soportada por el Control DataGrid del .NET Framework, sin embargo, es posible implementar esta caracter�stica realizando un peque�o UserControl, el cual explicaremos brevemente como realizarlo a continuaci�n:

    El primer paso que debemos es crear una clase de tipo User Control. Preferiblemente en un proyecto de tipo "Windows Control Library", para que se pueda crear su respectiva dll y poder reutilizar este control en diferentes aplicaciones.

    Seguidamente cambiaremos la clase a la cual el User Control esta siendo heredada. Debemos especificar que el User Control sera heredado de un Control DataGrid, de la siguiente manera:

public class CustomGrid : System.Windows.Forms.DataGrid

    Una vez creada la clase User Control, debemos sobrescribir el m�todo ProcessCmdKey, el cual es un m�todo que se utiliza para capturar en un nivel m�s bajo que los eventos KeyUp, KeyDown y KeyPress. Este m�todo es llamado durante el preprocesamiento de mensajes para manejar las teclas comandos. Para m�s informaci�n acerca del m�todo ProcessCmdKey, haga clic aqui.

protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)

{
}
    Es necesario definir una constante, la cual usaremos a continuaci�n en el m�todo que mencionamos anteriormente. Esta constante se utiliza para capturar el evento de "KeyDown".

private const int WM_KEYDOWN = 0x100;

    Ahora vamos a escribir el c�digo necesario para implementar esta caracter�stica en el User Control.

protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
    switch (msg.Msg)
    {
        case WM_KEYDOWN:
        switch (keyData)
        {
            case System.Windows.Forms.Keys.Enter:
                try
                {
                    DataGridCell newCell = new DataGridCell(this.CurrentCell.RowNumber+1,this.CurrentCell.ColumnNumber);
                    this.CurrentCell = newCell;
                   
                }
                catch
                {
                }
                break;

            default:
                MessageBox.Show(keyData.ToString());
                break;
        }
        break;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}

    Como podr�n apreciar en el primer Switch se maneja el tipo de mensaje que se esta capturando, en nuestro caso solo capturaremos los mensajes que sean de WM_KEYDOWN. Seguidamente encontramos un nuevo Switch, este maneja la tecla que fue presionada, por lo tanto este es el switch que nos interesa.

    Les coloque dos ejemplos, el primero "case System.Windows.Forms.Keys.Enter" captura cuando es presionada la tecla [Enter] y en este caso avanza un fila. El segundo ejemplo simplemente muestra un MessageBox, el cual contiene la tecla que fue precionada.

    Y listo! Pueden agregar el User Control que acaban de crear y probarlo en un Formulario.

    Anexo les env�o el c�digo completo para el User Control.


ir al ndice

Fichero con el c�digo de ejemplo: dsabo_DataGridPersonalizado.zip - Tama�o 1 KB