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.
Evez de usar 17 variables haz un array. Lo mismo sucede con los PictureBox, crear un array de controles.
Dim bX(17) as Integer
De esta manera los podrás recorrer.
For i = 1 to 17
If bX(i) = 1 Then
PictureBox(i).Image = My.Resources.rojo
end if
Next i
saludos.
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
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.
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í:
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:
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:
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.