Visual Basic.NET - Obtener coordenadas de un Datagrid

 
Vista:
Imágen de perfil de Mikado1955

Obtener coordenadas de un Datagrid

Publicado por Mikado1955 (15 intervenciones) el 22/02/2007 09:31:02
' Ejemplo de obtener la fila y butaca donde tenemos el cursor en un teatro.
' En la cabecera del Datagrid, tenemos el número de butaca, y en la primera columna el numero de fila
'
'Fila|01|02|03|04|05|06|.........|20|Fila
' 01 | | | | | | |.........| | 01
' 02 | | | | | | |.........| | 02
' 03 | | | | | | |.........| | 03
' 04 | | | |XX| | |.........| | 04
' 05 | | | | | | |.........| | 05
'...
'...
' 20 | | | | | | |.........| | 20
'===========================================================
'Si ponemos el cursor en la butaca 03 de la fila 04, nos dará el mensaje:
' " * " & lblPlanta & " * Fila " & Format(w_Row, "00") & " * Butaca " & Format(w_Col, "00") & " * "
'Donde lblPlanta = "Planta"
' w_Row = 04
' w_Col = 03
'===========================================================

Private Sub dgPlanta_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles dgPlanta.MouseMove
Dim Butaca, lblPlanta, x_Col As String
Dim hitrow As Integer = -1
Dim w_Ubicacion As String = String.Empty

Try
'obtenemos la coordenadas x e y
Dim pt = New Point(e.X, e.Y)

'HitTestInfo especifica la parte del control de system.windows.form.datagrid en el k el usuario se mueve.
'HitTest obtiene informacion como el numero de fila y columna de un punto de la cuadricula mediante
'la coordenadoas x e y k se ha pasado como parametro
Dim hti As DataGrid.HitTestInfo = dgPlanta.HitTest(pt)

If (hti.Type = DataGrid.HitTestType.Cell) And (hti.Row <> hitrow) Then
With Me.dgPlanta

.CurrentCell = New DataGridCell(hti.Row, hti.Column)

'marca las coordenadas.
'(sumamos 1 a la fila porqué el datagrid empieza a contar de 0.
'La cabecera del Datagrid, no cuenta como fila.)
w_Row = hti.Row + 1
w_Col = hti.Column
x_Col = CStr(Me.dgPlanta.TableStyles(0).GridColumnStyles(w_Col).HeaderText())

If x_Col = "Fila" Then
w_Row = 0
w_Col = 0
Else
w_Col = CInt(x_Col)
End If

' Montamos la ubicación en la planta
Butaca = "0"
lblPlanta = "Planta"

If w_Row <> 0 Then
Butaca = Me.dgPlanta.Item(0, w_Row)
If Butaca = "Fila" Then
Butaca = "0"
End If
End If

If Butaca = "0" Then
w_Ubicacion = ""
Else
w_Ubicacion = " * " & lblPlanta & " * Fila " & Format(w_Row, "00") & " * Butaca " & Format(w_Col, "00") & " * "
End If

'Presenta la ubicación en un campo.
'También podría ser un Tooltip, pero sólo aparece cuando el ratón está tocando el borde de la celda
Me.lblUbicaP.Text = w_Ubicacion

End With
End If

Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub

=======================================================================

Si alguien se atreve (o sabe cómo hacerlo) a poner color distinto a las celdas según esten libres u ocupadas, me hará un gran favor.
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