Foros del Web » Programación para mayores de 30 ;) » .NET »

Evitar avance de renglon en DGV al presionar Enter

Estas en el tema de Evitar avance de renglon en DGV al presionar Enter en el foro de .NET en Foros del Web. Hola que tal, bueno mi problema es el siguiente. Cuento con un DataGridView, el cual es editable, el problema se me presenta al momento de ...
  #1 (permalink)  
Antiguo 03/10/2012, 16:23
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Evitar avance de renglon en DGV al presionar Enter

Hola que tal, bueno mi problema es el siguiente. Cuento con un DataGridView, el cual es editable, el problema se me presenta al momento de terminar de editar una columna y presionar Enter me avanza a la siguiente columna, pero un renglon mas.

Ya le e puesto que ponga el foco en el renglon en el que estoy, pero sigue avanzando un renglon mas y eso no lo deberia de hacer. E investigado en la red y ya cale varios metodos, pero sigo igual

Si alguien sabe como poder controlar esto, le agradeceria me dijera que hacer o a que pagina dirigirme para resolverlo.

De antemano Gracias
  #2 (permalink)  
Antiguo 04/10/2012, 08:23
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Evitar avance de renglon en DGV al presionar Enter

No estoy seguro si esto se puede evitar pero has probado una vez que presione enter poner esto

SendKeys.Send("{left}") es decir al presionar enter si se mueve que te retrocederá un renglon
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #3 (permalink)  
Antiguo 04/10/2012, 09:25
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Respuesta: Evitar avance de renglon en DGV al presionar Enter

Hola que tal, gracias por reponder Dradi7, si ya lo intente pero sigue avanzando un renglon, yo lo habia hecho cambiandolo por un Tab y también ya probe poniendolo como e.Handled = true y sigue haciendo ese salto de renglon
  #4 (permalink)  
Antiguo 04/10/2012, 10:04
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Evitar avance de renglon en DGV al presionar Enter

Creo que esto es nativo ya del control, no estoy seguro si se podria detener dejame investigar y te confirmo

Saludos
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #5 (permalink)  
Antiguo 04/10/2012, 12:49
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Respuesta: Evitar avance de renglon en DGV al presionar Enter

Hola que tal, gracias Dradi7 por tu ayuda, pero ya encontre la solucion, por fin

Lo que hago es crear una clase y le heredo las funciones del DataGridView y le anexo ProcessDataGridViewKey y ProcessDialogKey y con esto controlo que avance a la columna siguiente en el mismo renglon y una vez que llega a la columna final, ahora si avanza un renglon mas en la prime columna.

Por fin, ahora a implementarlo.

Gracias

PD: Ya que lo implemente pondre la solucion completa
  #6 (permalink)  
Antiguo 05/10/2012, 12:18
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Respuesta: Evitar avance de renglon en DGV al presionar Enter

Hola que tal, bueno por ya lo implemente y funciona bien. Para esto genere un UserControl y lo anexe a las herramientas del C#.

Para eso solo necesitan anexar esto:

Código C#:
Ver original
  1. public class GridCtrl : DataGridView
  2.     {
  3.             protected override bool ProcessDataGridViewKey(KeyEventArgs e)
  4.             {
  5.                 if (e.KeyCode == Keys.Enter)
  6.                 {
  7.                     this.ProcessTabKey(e.KeyData);
  8.                     return true;
  9.                 }
  10.                 return base.ProcessDataGridViewKey(e);
  11.             }
  12.  
  13.             protected override bool ProcessDialogKey(Keys keyData)
  14.             {
  15.                 if (keyData == Keys.Enter)
  16.                 {
  17.                     this.ProcessTabKey(keyData);
  18.                     return true;
  19.                 }
  20.                 return base.ProcessDialogKey(keyData);
  21.             }
  22.     }

Cuando generen el DLL, en el modulo donde van a anexar el Grid personalizado van a TOOLS => CHOOSE TOOLBOX ITEMS => Seleccionan la pestaña .NET Framwork y buscan la DLL del Control de Usuario que acaban de anexar.

Con esto en las tools les aparecera el nuevo control que acaban de generar.

Solo tiene un detalle que al dar enter si hacen alguna validacion avanza una columna sin importar si esta mal la validacion.

Cualquier cosa aqui estamos para apoyar
  #7 (permalink)  
Antiguo 05/10/2012, 12:54
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Evitar avance de renglon en DGV al presionar Enter

Pero no creo que sea necesario usar un UserControl acuérdate que los UserControl solo se usan cuando vas a crear un nuevo componente, es decir que contenga varios objetos, para lo que estas haciendo solamente te bastaría usar un CustomControl

Saludos
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #8 (permalink)  
Antiguo 08/10/2012, 09:24
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Respuesta: Evitar avance de renglon en DGV al presionar Enter

Hola que tal, bueno en si nunca e creado un CustomControl jejejeje , pero ahorita por la urgencia de entregar este proyecto fue la solucion que encontre .

Igual investigare lo que comentas Dradi7 y ya con calma lo implementare.

Un saludo

Etiquetas: avance, datagridview, dgv, enter, presionar, renglon
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:30.