Sin duda no es un comportamiento común dentro de un Datagridview, sin embargo, en ocasiones es necesario, principalmente para permitir el que sea lanzado un menú contextual a la vez que se selecciona una fila o celda que se desea.
Sin embargo, para conseguirlo se requiere mas que solo activar alguna propiedad, es forzoso realizar este proceso mediante código, específicamente, una función que sea lanzada al momento que se presiona el botón del mouse, es decir, usando el evento Mouse down
Private Sub DGEquipos_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DGEquipos.MouseDown
If e.Button = Windows.Forms.MouseButtons.Right Then
With Me.DGEquipos
Dim Hitest As DataGridView.HitTestInfo = .HitTest(e.X, e.Y)
If Hitest.Type = DataGridViewHitTestType.Cell Then
.CurrentCell = .Rows(Hitest.RowIndex).Cells(Hitest.ColumnIndex)
End If
End With
End IfEnd Sub
En la primera y única condicional, solo hacemos que el sistema se asegure que se ha presionado el botón derecho, comparando el valor del boton que se ha presionado contra el valor de la constante del sistema perteneciente al botón derecho.
A continuación procedemos a declarar e inicializar una variable de tipo Hitestinfo, a quien se le asigna el resultado de la función hitest, perteneciente al datagridview deseado, dado que es una de las partes mas importantes, se ha remarcado en rojo.
el método Hitest nos devuelve el control o elemento que se encuentre en las coordenadas que se le dan como argumento que, en este caso, corresponden a las que nos indican donde se ha presionado el botón derecho del mouse
Al final, solo nos resta verificar si el tipo de control capturado en el paso anterior es una de las celdas del datagridview, en este caso, se ha remarcado la línea en azul.
Para terminar, solo ajustamos la celda usando los datos obtenidos a través de el método Hitest, paso remarcado en color café
Ojalá este método sea de tu ayuda, cualquier duda no olvides enviarme un correo o dejarme un comentario en el post.
Nos vemos, hasta el próximo post, que espero no sea dentro de otros 6 meses
Excelente código!!!
Mezclado con un ContextMenuStrip funciona de maravilla.
Gracias!!!
Saludos Braulio
Gracias por tu comentario; a mi me ha sido muy útil sobre todo cuando en el ContextMEnuStrip posees una opción para desplegar detalles o información relacionada a la fila que esta seleccionada, te evitas el paso de clic izquierdo + clic derecho
y como se haria lo mismo pero en c#?????
Asias por el código me sirvió mucho…
Saludos Cristian
Una disculpa por la demora, pero he tenido muchos contratiempos a últimos dias; para C#, solo necesitas hacer uso del mismo evento y escribir en él:
if (e.Button == Windows.Forms.MouseButtons.Right)
{
DataGridView.HitTestInfo Hitest = this.DGEquipos.HitTest( e.X,e.Y);
if (Hitest.Type == DataGridViewHitTestType.Cell)
{
this.DGEquipos.CurrentCell = this.DGEquipos.Rows;
Hitest.RowIndex.Cells[Hitest.ColumnIndex];
}
}
Saludos 3rlk
Ha resultado muy grato para mí el que te haya sido de ayuda
Un codigo buenisimo.
Y una explicación aun mas buena.
Gracias.
Buenas :
Queria que este codigo lo utilizo para que me muestre un menu para borrar.
Cuando borro un registro el grid se queda sin seleccion y tengo que darle al boton izquierdo.Para solucionar eso he añadido esta linea:
Grid1.CurrentCell.Selected = True
Gracias por el aporte, funciono de una y por tu explicación, muchas gracias..
Saludos Kyha:
Realmente no me había dado cuenta de ese detalle, hasta ahora no había incluido alguna opción de borrado en el menu que utilizo, muchas gracias por compartir una solución con nosotros.
Saludos Etiene:
Es un placer el que te haya sido de ayuda
Gracias
me sirvio bastante este post
nos vemos
bye
Hola cybk:
como me dado cuenta de que te gustan los datagridview.Tengo un codigo para poder introducir un button y un texbox en la misma celda .si interesa avisa.
Gracias por todo
Nos vemos
Saludos Kyha
Antes que nada disculpa la enorme demora, a últimas fechas tuve demasiados compromisos ( y siendo sincero algo de desidia
) pero ahora andamos de vuelta.
Te agradeceré mucho tu aporte, sobre todo porque imaginó que a más de uno de los lectores del blog le será de mucha utilidad.
No sé realmente si a travez del blog puedas acceder a mi información de contacto en WordPress, en caso de que no mi correo de hotmail es cybk2000athotmaildotcom, solo cambiando el at por ‘@’ y dot por ‘.’ como es usual
Nos vemos
Más aportes por favor !!! Gracias
Gracias por el aporte, me fue de gran ayuda
Siempre es un placer, cualquier comentario sobre el código, o cualquier mejora que creas que puede tener no dudes en avisarme
Gracias por el Código… veo q a muchos de nosotros nos sirvio!!!
Sigue adelante
BUENO QUERIA PREGUNTARLES COMO PUEDO TRABAJAR UN GRIDVIEW CON LA BASE DE DATOS NORTHWIND LO QUE PASA ES QUE CUANDO INGRESO EL CODIGO PARA QUE ME CONECTE A L A BASE DE DATOS ME SALE ERROR Y YA HICE TODO SE SUPONE QUE EL SERVIDOR DEVE TENER EL MISMO NOMBRE AL AGREGAR A LA VB EN EL CODIGO YA HICE ESO PERO IGUAL ME SALE ERROR PUEDEN AYUDARME PORFAVOR BIEN EXPLICADO PARA PODER ENTENDER GRACIAS ESTOY EN EL COLEGIO NOS ESTAN ENSEÑANDO VB CON BASE DE DATOS SQL SERVER LO QUE PASA ES QUE YO QUIERO SAVER MAS POR QUE ME INTEREZA MUCHISISISMO APRENDER VB GRACIAS Y ESPERO SUS APORTES BYE SALUDOS.
Quisiera saber si me pueden explicar más a fondo el tema tratado ¡por favor!