Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: JungleBoogie en 16 Febrero 2006, 20:00 pm



Título: Se puede hace lo siguiente mediante un 'FOR'?
Publicado por: JungleBoogie en 16 Febrero 2006, 20:00 pm
Hola muy buenas, tengo un 'problemilla'

Lo que me pasa es que quiero hacer unas acciones (que siempre son las mismas) pero el codigo queda MUY largo. Os lo explico:

Imaginad que tengo 16 Picture Boxes, nombrados segun su posicion en la pantalla (Fila, Columna), por ejemplo:
img0101, img0102, img0103, img0104
img0201, img0202, img0203, img0204
img0301, img0302, img0303, img0304
img0401, img0402, img0403, img0404

Al pulsar la tecla W (por poner un ejemplo, quisiera que cada fila cogiera la imagen de la fila de abajo, y lo tengo que hacer de la siguiente forma:

Código:
Private Sub Form_Keypress (KeyASCII as integer)
'Si la tecla presionada es 'W' o 'w' entonces:
If (KeyASCII = (87 Or 119)) Then
' Fila 1:
img0101.picture = img0201.picture
img0102.picture = img0202.picture
img0103.picture = img0203.picture
img0104.picture = img0204.picture

' Fila 2:
img0201.picture = img0301.picture
img0202.picture = img0302.picture
img0203.picture = img0303.picture
img0204.picture = img0304.picture

' Fila 3:
img0301.picture = img0401.picture
img0302.picture = img0402.picture
img0303.picture = img0403.picture
img0304.picture = img0404.picture

' La Fila 4 que se quede asi, no importa lo de esto =P
End If
End Sub

En vez de escribir un codigo tan largo, no se podria hacer algo parecido a lo siguiente?

Código:
Private Sub Form_Keypress (KeyASCII as integer)
if (KeyASCII = (87 Or 119)) Then
for Fila=1 to 3
for Col=1 to 4
SigFila = Fila + 1
imgFilaCol.picture = imgSigFilaCol.picture
Next
Next
End Sub

Se podria hacer algo por el estilo? Es que no es que sean 16 imagenes, he puesto 16 como ejemplo =P Y no es que solo sea pa mover las imagenes hacia arriba xD

Bueno, espero una respuesta, aunque sea un "No, no se puede hacer nada de eso"

Ale, Saludos ;)


Título: Re: Se puede hace lo siguiente mediante un 'FOR'?
Publicado por: Ironhorse en 16 Febrero 2006, 21:02 pm
Lo que tenes que hacer es crear una matriz de controles, los nombras a todos igual y lo que le cambias es la propiedad Index. Asi los podes recorrer con un bucle:

Código:
Dim i as long
For i=0 to 15
  imgX(i).picture = imgY(i).picture
Next i



Título: Re: Se puede hace lo siguiente mediante un 'FOR'?
Publicado por: JungleBoogie en 17 Febrero 2006, 17:02 pm
o.0 Me he perdido en lo de crear una matriz de controles. Como se hace eso? Porke en batxiller no recuerdo haberlo dado (fue hace 2 años)


Título: Re: Se puede hace lo siguiente mediante un 'FOR'?
Publicado por: Ironhorse en 17 Febrero 2006, 21:32 pm
Es facil, creas un control, lo copias y lo pegas, al pegarlo te va a preguntar si queres crear una matriz de controles, le pones que si y listo, a la segunda vez ya no te pregunta porque la matriz ya esta creada, si seguis pegando te agrega los controles a la matriz.

Saludos


Título: Re: Se puede hace lo siguiente mediante un 'FOR'?
Publicado por: JungleBoogie en 18 Febrero 2006, 17:02 pm
JuaS! Dicho asi parece facil. Esta misma noche me pongo a experimentar.

Gracias por tu ayuda ;)