Conectar Dos Form y Random de PictureBox

Iniciado por caca3000, 16 Mayo 2010, 07:17 AM

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

caca3000

Buenas, tengo un problema con visual c++ 2008, necesito crear varios PictureBox en un formulario, de manera que cuando de click en un botón genere imagenes aleatorias entre los PictureBox, he tratado de hacerlo pero no he podido, trate de hacerlo de la forma en como se hace en c#, pero me he dado cuenta de que tiene muchas diferencias en sintaxis, lo que necesito es algo como esto (este codigo es de c#):

private void button1_Click(object sender, EventArgs e)
{
List<string> pictureNames = new List<string>();
pictureNames.Add("_1000002314_1");
pictureNames.Add("_1000002314_2");
pictureNames.Add("_1000002315_1");
pictureNames.Add("a");

List<PictureBox> pictureBoxex = new List<PictureBox>();
pictureBoxex.Add(pictureBox1);
pictureBoxex.Add(pictureBox2);
pictureBoxex.Add(pictureBox3);
pictureBoxex.Add(pictureBox4);

ResourceManager rm = WindowsFormsApplication1.Properties.Resources.ResourceManager;
for (int i = 0; i < pictureBoxex.Count; i++)
{

int randomPictureIndex=new Random().Next(0,pictureNames.Count);
string randomPictureName = pictureNames[randomPictureIndex];
pictureNames.Remove(randomPictureName);
Image img = rm.GetObject(randomPictureName) as Image;
pictureBoxex.Image = img;
}
}
Pero esto no se como implementarlo en visual, si me pueden ayudar con un ejemplo en codigo de visual c++.

Otro problema q' tengo es a la hora de unir dos form, pues en c# simplemente agregaba el form2 y luego en el formulario padre lo q' hacia era nuevo_formulario = new Form2(); y luego nuevo_formulario.Show() para mostrarlo y ya podia trabajar, pero en visual c++ no he encontrado la forma de hacerlo.
Espero me puedan ayudar! gracias de antemano y saludos!!!!

43H4FH44H45H4CH49H56H45H

Que tipo de proyecto de visual c++ utilizas? me refiero a si usas uno de Windows Forms u otro?

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W

caca3000

Utilizo uno de windows form, y estoy utilizando visual c++ 2008

43H4FH44H45H4CH49H56H45H

Para mostrar el segundo formulario te basta con:
Código (cpp) [Seleccionar]
#include "Form2.h"

Código (cpp) [Seleccionar]
Form2^ f2 = gcnew Form2;
f2->ShowDialog();


y para acceder a los recursos:

http://support.microsoft.com/kb/816181/es


-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W

caca3000

Gracias!! me sirvio de mucho tu ayuda. Me podrías dar un ejemplo en código de como declarar y utilizar el random en visual c++, para generar imagenes aleatorias en un picturbox ?

43H4FH44H45H4CH49H56H45H

Código (cpp) [Seleccionar]
#include <stdlib.h>
#define MAX 9
#define MIN 1


Código (cpp) [Seleccionar]
for(int i = 0; i < 9; i++ )
{
     int u = (double)rand() / (RAND_MAX + 1) * (MAX - MIN)+ MIN;
     this->listBox1->Items->Add(u);
}


Agregando un listbox a tu form y listo.

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W

caca3000

Existe alguna forma de generar PictureBox aleatorios?, me refiero en el caso de que se tenga en un Form con varios PictureBox y sus respectivas imagenes y en vez de cargar la imagen aleatoria a cada PictureBox mover de posicion el pictureBox...

43H4FH44H45H4CH49H56H45H

Quieres decir que al cambiar de posicion, un picturebox determinado se vea delante de los otros y que sea el unico visible? para mostrar la imagen que tiene y no las que tienen los otros, si es asi puedes utilizar:

Código (cpp) [Seleccionar]
this->pictureBox1->Hide();

Código (cpp) [Seleccionar]
this->pictureBox1->Show();

asi muestras solo el o los que te interesan y ocultas el resto.

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W

caca3000

Me refiero en el caso de que yo tenga 36 picturebox con imagenes, tengo un Form1 y un Form2, al ejecutar el programa  muestro el form1 y mediante un botón accedo al Form2 que contiene 36 PictureBox con su respectiva imagen. Entonces la idea es que cada vez que le dé un click a ese botón me aparezcan las imagenes en diferentes posiciones (que nunca esten fijas en la misma posición sino que sean al azar). El código que me diste del random si me sirve pero tengo un problema al cargar las imagenes. Lo que quiero es hacer el juego de las parejas, la imagenes las tengo enumeradas de 1 hasta 36 osea hay 18 únicas y las otras 18 son las parejas de cada una. Pero al cargar el Form aparecen hasta 4 de la misma  y he puesto bastantes condicones para que eso no suceda y aún así sigue igual.
[while(cont != 36){

aux = (double)rand() / (RAND_MAX + 1) * (MAX - MIN)+ MIN;

n1 = aux

if(t1 == 1 ){
        if(n1 != n2 && n1 != n3 && n1 != n4 && n1 != n5 && n1 != n6 && n1 != n7 &&
           n1 != n8 && n1 != n9 && n1 != n10 && n1 != n11 && n1 != n12 && n1 != n13 &&
           n1 != n14 && n1 != n15 && n1 != n16 && n1 != n17 && n1 != n18 && n1 != n19 &&
           n1 != n20 && n1 != n21 && n1 != n22 && n1 != n23 && n1 != n24 && n1 != n25 &&
           n1 != n26 && n1 != n27 && n1 != n28 && n1 != n29 && n1 != n30 && n1 != n31 &&
           n1 != n32 && n1 != n33 && n1 != n34 && n1 != n35 && n1 != n36){

this->b1->Image = Image::FromFile(String::Concat(System::Environment::GetFolderPath(System::Environment::SpecialFolder::Personal),"\\" + aux + ".JPG"));
t1 = 0;
cont++;
}
}]

esa serie de n1, n2, n3....... Son declaraciones que contendran un numero aleatorio del 1 al 36, una vez que aux tenga el numero lo copia en n1 y aparte hay otra condición donde t1 esta inicializado en 1 entonces una vez que entre verifica que ese numero no sea igual al resto y si cumple lo asigna al p1 que es el PictureBox1 y cuando eso suceda t1 es 0 para que nunca vuelva a entrar ahí. Bueno el ciclo va a terminar hasta que todos los pictureBox esten llenos eso lo lleva el cont
No se si me explico bien, la verdad de esta forma no esta funcionando bien y ya no se que mas puedo hacer por eso pense que talvez era más fácil cargar manualmente las imagenes al pictureBox y luego hacer aleatorios los pictureBox pero no se como hacerlo. Muchas gracias por toda la ayuda 43H4FH44H45H4CH49H56H45H 

43H4FH44H45H4CH49H56H45H

Bueno segun entiendo quieres que los pictureBox se muevan en distintas posiciones y nunca repitan el mismo lugar, ya sea que lo hagas moviendo o asignando una imagen al picturebox, lo que tienes que hacer primero es crear un boton y un listbox, en el boton va un "Do - While" dentro del mismo debes generar el numero aleatorio y la condicion debe ser que mientras el numero generado estee contenido en el listbox que vuelva a generar dicho numero, asi evitas que los numeros se repitan, al salir de la condicion haces un switch y asignas la posicion o imagen para el picturebox deacuerdo al case.
Primero haz un proyecto nuevo solo para ver como funciona lo que te digo y luego lo aplicas a tu proyecto sin un listbox (que solo es para ver como funciona, pudiendo ser un array u otro.)
Saludos

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W