Bucle for que se incremente una variable

Iniciado por aspiazu, 15 Mayo 2016, 21:54 PM

0 Miembros y 1 Visitante están viendo este tema.

aspiazu

Buenaas

Tengo 17 picture box y 17 variables que se llaman b1..b2..b3..b17.Las variables cuando pulsas ciertos botones empiezan a valer 1.
Necesito un bucle que compruebe si las variables valen 1 ,y en caso que valga 1 cambie la imagen del picture box.

He probado algo asi pero no lo consigo.Lo de me.controls solo funciona para los controles.

Citar
For i As Integer = 1 To 15
            If (Me.Controls("b" & i) = 1) Then
                PictureBox2.Image = My.Resources.rojo
                cont = cont + 1
            End If

Tengo que conseguir que en bucle la variable b valla aumentando y el picturebox valla cambiando el numero del final.

fary

Evez de usar 17 variables haz un array. Lo mismo sucede con los PictureBox, crear un array de controles.

Código (vb) [Seleccionar]
Dim bX(17) as Integer

De esta manera los podrás recorrer.

Código (vb) [Seleccionar]

For i = 1 to 17
   If bX(i) = 1 Then
       PictureBox(i).Image = My.Resources.rojo
   end if
Next i


saludos.
Un byte a la izquierda.

aspiazu

Poniendo PictureBox(i).Image = My.Resources.rojo me da ese fallo

Error   1   'PictureBox' es un tipo y no se puede usar como expresión.   C:\Users\pbl\documents\visual studio 2010\Projects\ProyectoFinal\ProyectoFinal\Office.vb   74   17   ProyectoFinal


y poniendo PictureBox2(i).Image = My.Resources.rojo

Error   1   No se puede indizar la clase 'System.Windows.Forms.PictureBox' porque no tiene ninguna propiedad predeterminada.   C:\Users\pbl\documents\visual studio 2010\Projects\ProyectoFinal\ProyectoFinal\Office.vb   74   17   ProyectoFinal

Eleкtro

#3
Cita de: fary en 16 Mayo 2016, 09:47 AM
Evez de usar 17 variables haz un array. Lo mismo sucede con los PictureBox, crear un array de controles.

Código (vb) [Seleccionar]
Dim bX(17) as Integer

Pero ese Array conendrá 18 elementos, no 17, ya que en VB.NET los índices están basados en Cero.

Sería así:
Código (vb) [Seleccionar]
Dim bX(16) as Integer




Cita de: aspiazu en 16 Mayo 2016, 12:12 PM
Poniendo PictureBox(i).Image = My.Resources.rojo me da ese fallo

Error   1   'PictureBox' es un tipo y no se puede usar como expresión.

El error se debe a que estás aplicando mal la solución que te proporcionó @Fary.

PictureBox debe ser un array que contenga tus controles de tipo PictureBox.

Imagino que al llamarse de la misma forma, eso te habrá llevado a la confusión.




Personálmente te sugiero utilizar un diccionario para poder relacionar cada control con su respectivo valor y así simplificar la tarea:

Código (vbnet) [Seleccionar]
Dim pcbDict As New Dictionary(Of PictureBox, Integer) From {
   {Me.PictureBox1, 0},
   {Me.PictureBox2, 1},
   {Me.PictureBox3, 1},
   {Me.PictureBox4, 0},
   {etc...}}

For Each kv As KeyValuePair(Of PictureBox, Integer) In Me.pcbDict
   If (kv.Value = 1) Then
       kv.Key.Image = My.Resources.rojo
   End If
Next


Si lo quieres simplificar todavía más, puedes utilizar la propiedad PictureBox.Tag para asignar un valor Integer a cada PictureBox, y entonces solo tendrías que iterar la colección de controles:

Código (vbnet) [Seleccionar]
For Each pcb As PictureBox In Me.Controls.OfType(Of PictureBox)
   Dim value As Integer = CType(pcb.Tag, Integer)
   If (value = 1) Then
       pcb.Image = My.Resources.rojo
   End If
Next pcb


Saludos.