Muchas gracias Elektro por todo, ya he probado la segunda opción y es la que me voy a quedar (dejo aqui el código) es justo lo que quería, por un lado con el sender obtengo las propiedades de la matriz del PictureBox donde he realizado click para cambiar y por otro lado el índice con tu función que era la pregunta principal, así conservo los datos de mi propiedad Tag que puedo modificar.
Tienes un dominio absoluto de los métodos de las clases, te envidio (sanamente) por tu facilidad sobre la programación en general, yo como ya comente en otros post programo por hobby para realizar pequeños jueguecitos principalmente con VB.NET y XNA, aunque ahora también aprendí algo de C# (traducciones a vb.net) y GameMaker (v.1.4).
Gracias por la explicación de Friend, como suelo utilizar clases externas siempre pongo public. Siempre veo que sueles utilizar la forma correcta y de buenas prácticas para programar, aunque muchos no lo entendemos y dando consejos de que no utilizar. Miraré esa información a modo consulta. Sobre el tema de modificar un PictureBox o cualquier otro control, creo que es muy extenso y ese tercer método no utilizaré. Saludetes y que pases un buen finde
Tienes un dominio absoluto de los métodos de las clases, te envidio (sanamente) por tu facilidad sobre la programación en general, yo como ya comente en otros post programo por hobby para realizar pequeños jueguecitos principalmente con VB.NET y XNA, aunque ahora también aprendí algo de C# (traducciones a vb.net) y GameMaker (v.1.4).
Gracias por la explicación de Friend, como suelo utilizar clases externas siempre pongo public. Siempre veo que sueles utilizar la forma correcta y de buenas prácticas para programar, aunque muchos no lo entendemos y dando consejos de que no utilizar. Miraré esa información a modo consulta. Sobre el tema de modificar un PictureBox o cualquier otro control, creo que es muy extenso y ese tercer método no utilizaré. Saludetes y que pases un buen finde
Código (vbnet) [Seleccionar]
Public Class Form1
Private Matriz(2, 3) As PictureBox ' Matriz de 3x4 elementos
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Dibujamos matriz bidimensional de 3 filas y 4 columnas
For F = 0 To 2 ' Recorre las Filas
For C = 0 To 3 ' Recorre las Columnas
Matriz(F, C) = New PictureBox
Matriz(F, C).Size = New Size(32, 32)
Matriz(F, C).BorderStyle = 1
Matriz(F, C).Location = New Point(C * 32 + C, F * 32 + F + 100)
Matriz(F, C).Tag = 0
Me.Controls.Add(Matriz(F, C))
AddHandler Matriz(F, C).Click, AddressOf Evento2
Next C
Next F
End Sub
Private Sub Evento2(sender As Object, e As EventArgs)
Dim indices As Integer() = IndicesOf(Matriz, DirectCast(sender, PictureBox))
Dim pcb As PictureBox = DirectCast(sender, PictureBox)
pcb.BackColor = Color.Blue
MsgBox("Valor Fila: " & indices(0) + 1 & " y Columna: " & indices(1) + 1)
End Sub
' Función obtener índice de una Matriz de 2 dimensiones
Public Shared Function IndicesOf(Of T)(ByVal [array] As T(,), ByVal value As T) As Integer()
For i As Integer = [array].GetLowerBound(0) To [array].GetUpperBound(0)
For j As Integer = [array].GetLowerBound(1) To [array].GetUpperBound(1)
If [array](i, j).Equals(value) Then
Return {i, j}
End If
Next j
Next i
Return Nothing
End Function
End Class