Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: caca3000 en 16 Mayo 2010, 07:17 AM

Título: Conectar Dos Form y Random de PictureBox
Publicado por: caca3000 en 16 Mayo 2010, 07:17 AM
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!!!!
Título: Re: Conectar Dos Form y Random de PictureBox
Publicado por: 43H4FH44H45H4CH49H56H45H en 16 Mayo 2010, 16:08 PM
Que tipo de proyecto de visual c++ utilizas? me refiero a si usas uno de Windows Forms u otro?
Título: Re: Conectar Dos Form y Random de PictureBox
Publicado por: caca3000 en 16 Mayo 2010, 23:06 PM
Utilizo uno de windows form, y estoy utilizando visual c++ 2008
Título: Re: Conectar Dos Form y Random de PictureBox
Publicado por: 43H4FH44H45H4CH49H56H45H en 17 Mayo 2010, 01:04 AM
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

Título: Re: Conectar Dos Form y Random de PictureBox
Publicado por: caca3000 en 17 Mayo 2010, 03:01 AM
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 ?
Título: Re: Conectar Dos Form y Random de PictureBox
Publicado por: 43H4FH44H45H4CH49H56H45H en 17 Mayo 2010, 03:37 AM
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.
Título: Re: Conectar Dos Form y Random de PictureBox
Publicado por: caca3000 en 18 Mayo 2010, 23:56 PM
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...
Título: Re: Conectar Dos Form y Random de PictureBox
Publicado por: 43H4FH44H45H4CH49H56H45H en 19 Mayo 2010, 14:55 PM
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.
Título: Re: Conectar Dos Form y Random de PictureBox
Publicado por: caca3000 en 19 Mayo 2010, 17:08 PM
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 
Título: Re: Conectar Dos Form y Random de PictureBox
Publicado por: 43H4FH44H45H4CH49H56H45H en 20 Mayo 2010, 18:11 PM
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
Título: Re: Conectar Dos Form y Random de PictureBox
Publicado por: caca3000 en 22 Mayo 2010, 21:02 PM
 ;-) Excelente gracias!! me sirvio. Otra consulta, la verdad se me esta dificultando hacer las comparaciones entre las parejas ya tengo el codigo y me funciona, pero el problema es q' tengo que comparar imagen1 con todo el resto, imagen2 con todo el resto.... y asi sucesivamente pero es exagerado el codigo que se hace y muy tedioso tener que estar cambiando los nombres de las variables para que me sirvan segun las condiciones, entonces estaba tratando de hacer una funcion que me hiciera ese calculo pero me da un error:
[ void calculo(int num_1, int num_2,  Button boton_1, Button boton_2){
}]

la idea es que reciba como parametros 2 enteros y dos controles en este caso 2 botónes pero así como lo tengo declarado no me da error pero si  a la hora de llamar a la función:
[code][calculo(n1, n2, btn1, btn2);]

el error es el siguiente:
"no se puede convertir el parámetro 3 de 'System::Windows::Forms::Button ^' a 'System::Windows::Forms::Button'"

Si me puedes ayudar a arreglar este problema te lo agradecería!!!!
[/code]
Título: Re: Conectar Dos Form y Random de PictureBox
Publicado por: 43H4FH44H45H4CH49H56H45H en 25 Mayo 2010, 15:24 PM
Quieres hacer algo asi?
Código (cpp) [Seleccionar]
void test(System::Windows::Forms::Button^ But)
{
   But->Text = "Hola";
}


Código (cpp) [Seleccionar]
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    test(this->button1);
}