C sharp - manejador de evenyo keypress

 
Vista:
sin imagen de perfil

manejador de evenyo keypress

Publicado por eduardo (3 intervenciones) el 31/05/2014 02:19:44
hola :

buscando encontre este codigo para que en una celda de un datagrd , al pulsar F4 pueda capturar el evento :

Como capturar el evento de una tecla sobre una celda de un DataGridView por ejemplo para abrir una pantalla de ayuda de datos para esa celda.

Declaramos

1
2
private KeyEventHandler Handler;
private TextBox textBoxCell;

En el Evento Load del formulario declaramos un manejador de eventos:

1
Handler = new KeyEventHandler(textBoxCell_KeyPress);

Añadimos el evento a todas aquellas deldas de la rejilla que sean de tipo TextBox

1
2
3
4
5
6
7
8
9
10
11
private void datagridview_1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    textBoxCell = e.Control as TextBox;
    if (textBoxCell != null){
       try{
            textBoxCell.KeyDown -= Handler;
        }
        catch{ }
        textBoxCell.KeyDown += Handler;
    }
}

Por último Capturamos el Evento:

1
2
3
4
5
6
private void textBoxCell_KeyPress(object sender, KeyEventArgs e){
 
    if (e.KeyCode == Keys.F4 ){
 
       MessageBox.Show("keypress ");
}

segui todos los pasos al pie de la letra

pero pulso f4 y no se ejecuta el evento .

no se si tendra qeu ver qeu el datagrid lo lleno a partir de elegir un anio y un mes de la siguiente manera

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void InicializaGridView()
        {
            String lcFecha, lcFechaIncrementada;
            DateTime ldDateTime;
 
            lcFecha = cmbanio.Text.ToString().Trim() + cmbMeses.Text.ToString().Substring(0, 2) + "01";
            int f;
            for (f = 0; f <= 30; f++)
            {
                ldDateTime = loFunciones.TransformarFechaStringEnDate(lcFecha);
                lcFechaIncrementada = loFunciones.SumaDiaADateTimeYDevuelveDiaEnString(ldDateTime, f);
                dgvRecaudacion.Rows.Add(lcFechaIncrementada);
            }
        }

o sea a partir de legir un mes y un año , genera 30 filas , una por cada dia del mes .

queria saber que estoy haciend omal . gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

manejador de evenyo keypress

Publicado por Pico (114 intervenciones) el 31/05/2014 08:16:05
¿Y eso de dónde lo has sacado? ¿ desde cuándo una tecla F4 llama un KeyPress? ¿desde cuándo el windows con un F4 llama a TranslateMessage que mande el WM_CHAR a la cola de mensajes? Pregúntale todo eso al que ha puesto el código a ver, que me he quedado yo con la duda. Y si lo del F4 lo has puesto tú y él en el ejemplo a puesto la tecla n el problema es ese; a él le funcionará pero a ti no.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

manejador de evenyo keypress

Publicado por eduardo (22 intervenciones) el 31/05/2014 20:01:22
Pico:

ante todo gracias por responder ! no tengo la pagina de donde encontre este codigo.
lo concreto es que probe de asignarle otra letra ( enter ,k ) en vez de f4 y cuando voy a la grilla no se ejecuta el evento .
recien estoy empezando hace poco con Net . estoy migrando un pequeño sistema hecho en visua fox a este lenguaje
queria pedirte si me podes decir cual es la manera correcta de invocar el evento keypress en un datagrid en una determinada columna . gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

manejador de evenyo keypress

Publicado por Pico (114 intervenciones) el 31/05/2014 21:41:32
Si lo que quieres es responder a un evento keypress lo que tienes que hacer es irte a las propiedades del datagridview, en la parte de los eventos, buscas el KeyPress y le das un doble click. Luego en el form pones la propiedad KeyPreview a true y ya está.

Pero me parece que para lo que quieres no necesitas eso, sino un evento CellBeginEdit o CellEndEdit. Se llama uno cuando se inicia la edición de una celda, cuando aparece el cursor, y el otro cuando acaba la edición, cuando se va el cursor. Así, cuando alguien escriba algo, se llama la función tuya y añades las filas que sean.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

manejador de evenyo keypress

Publicado por eduardo (1 intervención) el 02/06/2014 01:07:38
hola:


puse este cdigo en el evento CellBeginEdit de la grilla dgvRecaudacion

1
2
3
4
5
6
7
8
9
private void dgvRecaudacion_CellBeginEdit(object sender,
                          DataGridViewCellCancelEventArgs e)
        {
 
            MessageBox.Show("celledit");
            string msg = String.Format("Editing Cell at ({0}, {1})",
                e.ColumnIndex, e.RowIndex);
            this.Text = msg;
        }


yo lo que interpreto es que al editar cualquier celda de la grilla me tendria que salir el message que puse en el inicio ( MessageBox.Show("celledit");) , y al editar cualuier celda no lo hace . no se si estoy haciendo algo ma l o el evento hay que llamarlo de algun lado , o simplemente al editar una celda se tiene que ejecutar . gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

manejador de evenyo keypress

Publicado por Pico (114 intervenciones) el 02/06/2014 07:21:50
¿El qué no hace?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

manejador de evenyo keypress

Publicado por eduardo (22 intervenciones) el 02/06/2014 19:23:02
gracias por la ayuda .

lo que no hace es mostrar el mensage "celledit" que le puse al codigo del evento CellBeginEdit, entendiendo que este mensaje tendria que aparecer cuando yo escribo en cualquier celda de la grilla porque se tiene que ejecutar el codigo

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

manejador de evenyo keypress

Publicado por Pico (114 intervenciones) el 02/06/2014 19:27:03
A mí me lo hace. Y pone en el título de la ventana lo de Editing cell y todo. Tienes que asignarle el evento en las propiedades del grid.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

manejador de evenyo keypress

Publicado por eduardo (22 intervenciones) el 03/06/2014 02:41:41
ahora si ! me faltaba asignar el evento en las propiedades , por eso no andaba . bueno , se va aprendiendo .
gracias por la ayuda y la paciencia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar