elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Bucle for que se incremente una variable
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Bucle for que se incremente una variable  (Leído 1,717 veces)
aspiazu

Desconectado Desconectado

Mensajes: 58


Ver Perfil
Bucle for que se incremente una variable
« en: 15 Mayo 2016, 21:54 pm »

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.


En línea

fary
Colaborador
***
Desconectado Desconectado

Mensajes: 958



Ver Perfil WWW
Re: Bucle for que se incremente una variable
« Respuesta #1 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
  1. Dim bX(17) as Integer

De esta manera los podrás recorrer.

Código
  1. For i = 1 to 17
  2.    If bX(i) = 1 Then
  3.        PictureBox(i).Image = My.Resources.rojo
  4.    end if
  5. Next i

saludos.


En línea

Un byte a la izquierda.
aspiazu

Desconectado Desconectado

Mensajes: 58


Ver Perfil
Re: Bucle for que se incremente una variable
« Respuesta #2 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.   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
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.708



Ver Perfil
Re: Bucle for que se incremente una variable
« Respuesta #3 en: 28 Mayo 2016, 05:52 am »

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

Código
  1. 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
  1. Dim bX(16) as Integer



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
  1. Dim pcbDict As New Dictionary(Of PictureBox, Integer) From {
  2.    {Me.PictureBox1, 0},
  3.    {Me.PictureBox2, 1},
  4.    {Me.PictureBox3, 1},
  5.    {Me.PictureBox4, 0},
  6.    {etc...}}
  7.  
  8. For Each kv As KeyValuePair(Of PictureBox, Integer) In Me.pcbDict
  9.    If (kv.Value = 1) Then
  10.        kv.Key.Image = My.Resources.rojo
  11.    End If
  12. 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
  1. For Each pcb As PictureBox In Me.Controls.OfType(Of PictureBox)
  2.    Dim value As Integer = CType(pcb.Tag, Integer)
  3.    If (value = 1) Then
  4.        pcb.Image = My.Resources.rojo
  5.    End If
  6. Next pcb

Saludos.
« Última modificación: 28 Mayo 2016, 06:00 am por Eleкtro » En línea


Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines