none
Condicion para un boton en windows forms c++ RRS feed

  • Pregunta

  • Buen día, estoy haciendo un programa en el cual al pulsar un boton, este debe organizar un grupo de imagenes en ciertas posiciones, dado el caso en el que se vuelva a pulsar el boton, las posiciones de estas imagenes cambien y asi sucesivamente hasta que el usuario decida continuar. El problema esta en que utilice una variable llamada contador y un switch que analizara el valor de ese contador, dependiendo de si es 0, 1... etc, pondra las imagenes en una posicion y le sumara 1 al contador, para que asi al volver a pulsar no caiga en el mismo case, pero, al parecer no funciona y se queda en la primera opcion del switch. Quisiera saber que puedo hacer para que vaya cambiando, gracias.
    martes, 24 de noviembre de 2020 20:21

Respuestas

  • Intenta cambiar los parenteis '(' por corhetes '['

    ejemplo:

    Perro2->Location = Point(Vx[1+rand()%(5-1)], Vx[1+rand()%(5-1)]);

    te dejo un enlace que podria ayudarte.
    https://www.youtube.com/watch?v=ccycaKDGNjI

    • Editado J. Abraham Leon miércoles, 25 de noviembre de 2020 0:34 Correción
    • Marcado como respuesta Nefherset miércoles, 25 de noviembre de 2020 1:09
    miércoles, 25 de noviembre de 2020 0:31

Todas las respuestas

  • Hola!, Podrías mostrar tu código por favor así podremos ayudarte mejor.
    martes, 24 de noviembre de 2020 20:29
  • Hola, mira. Esta seria la parte de cuando el boton es pulsado 

    private: System::Void BotonOrdenar_Click(System::Object^ sender, System::EventArgs^ e) {
    int contador;

    Granjero1->Visible = true;
    Militar1->Visible = true;
    Policia1->Visible = true;
    Robot1->Visible = true;
    Perro1->Visible = true;

    Granjero2->Visible = true;
    Militar2->Visible = true;
    Policia2->Visible = true;
    Robot2->Visible = true;
    Perro2->Visible = true;


    switch (contador) {
    case(0): {
    Granjero1->Location = Point(601, 50);
    Militar1->Location = Point(117, 125);
    Policia1->Location = Point(601, 204);
    Robot1->Location = Point(723, 284);
    Perro1->Location = Point(357, 362);

    Granjero2->Location = Point(235, 284);
    Militar2->Location = Point(479, 362);
    Policia2->Location = Point(235, 50);
    Robot2->Location = Point(479, 125);
    Perro2->Location = Point(117, 204);

    contador = contador + 1;
    break;
    }

    case(1): {
    Granjero1->Location = Point(117, 50);
    Militar1->Location = Point(479, 125);
    Policia1->Location = Point(723, 204);
    Robot1->Location = Point(235, 204);
    Perro1->Location = Point(357, 50);

    Granjero2->Location = Point(601, 125);
    Militar2->Location = Point(479, 362);
    Policia2->Location = Point(235, 362);
    Robot2->Location = Point(479, 284);
    Perro2->Location = Point(723, 284);

    contador = contador + 1;
    break;
    }

    case(2): {
    Granjero1->Location = Point(723, 125);
    Militar1->Location = Point(479, 50);
    Policia1->Location = Point(357, 204);
    Robot1->Location = Point(117, 284);
    Perro1->Location = Point(117, 362);

    Granjero2->Location = Point(479, 284);
    Militar2->Location = Point(723, 204);
    Policia2->Location = Point(601, 362);
    Robot2->Location = Point(117, 125);
    Perro2->Location = Point(601, 50);

    contador = 0;
    break;
    }

    }  
    }

    martes, 24 de noviembre de 2020 20:32
  • Si, lo que pasa es que si recuerdas el Switch le asignas el valor de contador, entonces cuanto tu contador es mayor que 2 se saldrá del Switch y no hará ya nada.
    Solo tengo dos preguntas más.
    Estas obligado a ocupar Switch?
    Las imagen tienen que aparecer en una posición especifica?

    martes, 24 de noviembre de 2020 20:42
  • No hay obligacion de usar un switch, realmente fue una idea porque hay que posicionar esas imagenes aleatoriamente y fue lo unico que se me ocurrio. Respecto a lo otro, si, las imagenes deben aparecer en una posicion especifica ya que como no se usar matrices para facilitar el tema con las posiciones lo hice de esa forma.
    martes, 24 de noviembre de 2020 20:55
  • Intenta lo siguiente.

    In Vx[]={723,479,357,117,601}

    In Vy[]={125,50,204,284,362}

    private: System::Void BotonOrdenar_Click(System::Object^ sender, System::EventArgs^ e) {

    Granjero1->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));
    Militar1->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));
    Policia1->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));
    Robot1->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));
    Perro1->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));

    Granjero2->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));
    Militar2->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));
    Policia2->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));
    Robot2->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));
    Perro2->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));

    }

    Aqui lo que hacemos es guardar las posiciones en los Vectores Vx y Vy y con Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1))); tomamos las posiciones de manera aleatoria dentro de nuestro vector en este caso solo son 5 posiciones en caso de que sean 6 tendrías que aumentar el rango.

    Por ejemplo
    Point(Vx(2), Vx(1); en caso de que los números aleatorias sean 2 y 1 tomara el valor que esta en la posición del vector Vx que es 479 y el primer valor de Vy que es igual a 125 entonces la posición de la imagen sera (479,125)

    Puedes intentarlo y contarnos como te fue?

    martes, 24 de noviembre de 2020 21:47
  • Mira, me aparece este error, pero realmente no tengo idea de donde tendria que ponerlo, podrias ayudarme por favor?

    https://1drv.ms/u/s!Ag_b3Xv43vwogYMIjE2o92SOw8EL5w

    martes, 24 de noviembre de 2020 22:20
  • Dale doble click al formulario para crear el evento Load y ahi ingresa los vectores.
    martes, 24 de noviembre de 2020 22:26
  • Hola, disculpa no te entiendo. Podrias explicarme a que te refieres por favor? Gracias
    martes, 24 de noviembre de 2020 22:27
  • Te refieres a este, verdad? https://1drv.ms/u/s!Ag_b3Xv43vwogYMJSDOtxXDVuA_ZdQ?e=9BDHp4

    Tendria que poner unicamente el 

    In Vx[]={723,479,357,117,601}

    In Vy[]={125,50,204,284,362}

    o todo lo que me enviaste? Disculpa por tantas preguntas 

    martes, 24 de noviembre de 2020 22:31
  • No te preocupes, mira lo que esta pasando es que esta es que el programa no sabe donde colocar los vectores, vamos a probar en ingresar los vectores dentro del evento click asi. 

    private: System::Void BotonOrdenar_Click(System::Object^ sender, System::EventArgs^ e) {

    In Vx[]={723,479,357,117,601}

    In Vy[]={125,50,204,284,362}

    Granjero1->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));
    Militar1->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));
    Policia1->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));
    Robot1->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));
    Perro1->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));

    Granjero2->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));
    Militar2->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));
    Policia2->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));
    Robot2->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));
    Perro2->Location = Point(Vx(1+rand()%(5-1)), Vx(1+rand()%(5-1)));

    }

    martes, 24 de noviembre de 2020 22:33
  • Ahora me aparece este error :/

    https://1drv.ms/u/s!Ag_b3Xv43vwogYMKerMPt8S6gsFF7A?e=arXnCD

    martes, 24 de noviembre de 2020 22:38
  • Intenta cambiar los parenteis '(' por corhetes '['

    ejemplo:

    Perro2->Location = Point(Vx[1+rand()%(5-1)], Vx[1+rand()%(5-1)]);

    te dejo un enlace que podria ayudarte.
    https://www.youtube.com/watch?v=ccycaKDGNjI

    • Editado J. Abraham Leon miércoles, 25 de noviembre de 2020 0:34 Correción
    • Marcado como respuesta Nefherset miércoles, 25 de noviembre de 2020 1:09
    miércoles, 25 de noviembre de 2020 0:31
  • Si, muchisimas gracias

    miércoles, 25 de noviembre de 2020 1:09