Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

URGE!!!! AYUDA EN VISUAL C# 2008 !! PLEASE!!!!!

templar_snake

Bovino maduro
Desde
26 Mar 2008
Mensajes
114
Hola compañeros pido su ayuda a los expertos de este tema, resulta que me dejaron un programa de numeros aleatorios pero con 400 picture box que cambian a 4 posibles iamgenes de color con respecto de un numero aleatorio. El problema es que es un switch con 400 cases con su suwtich propio y 4 cases y es a fuerzas utilizar ciclos.

El problema aqui es que como puedo manejar 400 picturebox en un for ?? intente crear algo asi en el archivo designer :


private void InitializeComponent()
{
for (int i = 0; i < 400; i++)
{
this.pictureBoxes = new System.Windows.Forms.PictureBox();
}
for (int i = 0; i < 400; i++)
{
((System.ComponentModel.ISupportInitialize)(this.pictureBoxes)).BeginInit();
}

this.button1 = new System.Windows.Forms.Button();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(246, 99);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
//
// pictureBox1
//
for (int j = 0; j < 20; j++)
{
for (int i = 0; i < 20; i++)
{
this.pictureBoxes[1].Location = new System.Drawing.Point(i*2, j*2);
this.pictureBoxes[1].Name = "pictureBox1";
this.pictureBoxes[1].Size = new System.Drawing.Size(15, 15);
this.pictureBoxes[1].TabIndex = 1;
this.pictureBoxes[1].TabStop = false;

}
}


//
//
//
this.pictureBox1.Location = new System.Drawing.Point(413, 241);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(100, 50);
this.pictureBox1.TabIndex = 1;
this.pictureBox1.TabStop = false;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(780, 548);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";

for (int i = 0; i < 400; i++)
{
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
}

((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);

}

#endregion

private System.Windows.Forms.Button button1;
private System.Windows.Forms.PictureBox pictureBox1;

for (int i = 0; i < 400; i++)
{
private System.Windows.Forms.PictureBox pictureBoxes;
}
}

pero no me funciona para usarlos en un for por que ni siquera los reconoce, de hecho me saca estos errores:

Error 2 Se esperaba una definición de tipo o espacio de nombres, o el fin del archivo C:\Documents and Settings\Snake\Mis documentos\Visual Studio 2008\Projects\Canícas2\Canícas2\Form1.Designer.cs 109 1 Canícas2

Advertencia 1 El diseñador no puede procesar el código en la línea 32:

for (int i = 0; i < 400; i++)
{
this.pictureBoxes = new System.Windows.Forms.PictureBox();
}

El código del método 'InitializeComponent' se genera mediante el diseñador y no se debe modificar manualmente. Quite cualquier cambio realizado e intente abrir el diseñador de nuevo. C:\Documents and Settings\Snake\Mis documentos\Visual Studio 2008\Projects\Canícas2\Canícas2\Form1.Designer.cs 33 0

aparte de que dice que el ultimo for que esta hasta abajo no puede estar ahi!!!

que hago???!!! ayuda por favor!!


muchas gracias y saludos!
 
Intenta utilizar ForEach en vez del for que tienes. Es un ciclo similar pero este hacer un recorrido de todos los objetos que se encuentren dentro de alguna coleccion. te mando un ejemplo sencillo que acabo de hacer despues de leer tu duda
private void button1_Click(object sender, EventArgs e)
{
int i = 25;
int j = 35;

//Hacemos un recorrido de los objetos de tipo Controll en el formulario activo
foreach (Control picture in this.Controls)
{
i = i + 20;
j = j + 20;
//Preguntamos si el objeto es de tipo PictureBox
if (picture is PictureBox)
{
//Si se cumple cambaimos la posicion del objeto
picture.Top = picture.Top + i;
picture.Left = picture.Left + j;
}
}
}
 
Creo que debes replantear el problema, deja ver si te entendi, necesitas tener un formulario, dentro de ese formulario, crear 400 pincturebox, a cada uno de ellos asignarle una imagen aleatoria de entre 4 posibles, si no es asi, explica un poco mejor el problema para poder orientarte mejor, el foreach te servira cuando ya esten creados los objetos, antes no pues no tendras referencia previa a ellos.

Si es como lo plantee anteriormente aqui tienes el código para llenar los picturebox de un color aleatorio, solo cambia el color por la imagen que desees, espero te sirva:

Código:
        private void button1_Click(object sender, EventArgs e)
        {
            foreach (Control pbx in this.Controls)
                if (pbx is PictureBox)
                    this.Controls.Remove(pbx);

            PictureBox pb;
            Random rnd = new Random(DateTime.Now.Second);
            Color clr = Color.Blue;
            int c = 0;
            int top = 0;
            int left = 0;

            for (int i = 0; i < 400; i++)
            {
                c= rnd.Next(1, 5);

                if (i % 20 == 0){
                    left = 0;
                    top += 22;
                }
                else {
                    left += 22;
                }

                switch (c){
                    case 1:
                        clr = Color.Red;
                        break;
                    case 2:
                        clr = Color.Green;
                        break;
                    case 3:
                        clr = Color.Blue;
                        break;
                    case 4:
                        clr = Color.Yellow;
                        break;
                }
                pb = new PictureBox();
                pb.Width = 20;
                pb.Height = 20;
                pb.Top = top;
                pb.Left = left;
                pb.BackColor = clr;
                Controls.Add(pb);
            }
        }
 
Muchisimas gracias por sus comentarios, comentare el problema:

Ok, pues el problema que tengo es este: Debo de hacer 400 picture box (osea una "cuadricula" de 20x20) en pantalla las cuales esten de un color base y cuando presione el boton todos los picturebox cambien aleatoriamente a otro color, el problema es que como puedo manejar un for para que pueda ciclar los 400 picturebox.


como puedo hacer para menajar 400 picturebox en un for?

por ejemplo quiero darle a estos 400 picturebox alguna propiedad, entonses tendria que poner 400 picturebox1.image = properties.resources.color; despues picturebox2.image = properties.resources.color; y asi...

El codigo comentado es un ejemplo de mas o menos lo que busco por favor o si me dicen como se puede hacer ahora que ya mas o menos explique el problema

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Canicas
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

int[,,] n = new int[20, 20,2];
Random ranobj = new Random();
int c, r1, r2,tope=0;

//numero aleatorio para cada picture box
private int randomNod()
{
int randnod;
randnod=ranobj.Next(0, 20);
return randnod;
}

//numero aleatorio para cada color
private int randomCol()
{
int randcol;
randcol = ranobj.Next(0, 4);
return randcol;
}

//aqui se llena la matriz de 3 dimenciones en las que los primeros dos elementos se guarda
//un numero consecutivo para identificar cada picturebox y el 3er elemento es cero para
//determinar que tiene el color base
private void relleno()
{
int num = 0;

for (int j = 0; j < 20; j++)
{
for (int i = 0; i < 20; i++)
{
n[i, j, 0] = num;
n[i, j, 1] = 0;
num++;
}
}
}

private void hazar()
{
for (int i=0;tope < 400;i++ )
{
r1 = randomNod();
r2 = randomNod();

c = n[r1, r2, 1];
if (c == 0)//determinamos si el elemento sigue teniendo el color base
{
switch (randomCol())
{

/*
case 0: pictureBox1.Image = Properties.Resources.Amarillo;
break;
case 1: pictureBox.Image = Properties.Resources.Azul;
break;
case 2: pictureBox.Image = Properties.Resources.Rojo;
break;
case 3: pictureBox.Image = Properties.Resources.Verde;
break;
*/
}
n[r1, r2, 1] = 1;
tope++;
}
}

}

public void button1_Click(object sender, EventArgs e)
{
tope = 0;
relleno();
hazar();
}

}
}
 
Volver
Arriba