[ Foro de C# ]

Evento Clik

09-Oct-2013 10:50
Invitado (Serafín)
5 Respuestas

Hola , la verdad es que soy un principiante y me gustaría hacer una pregunta por si alguien puede ayudarme .Estoy haciendo un porograma que cuando muevo un picture.box con un botón de comando quiero que cambie la imagen si doy con el cursor cuando se está moviendo , es deecir , cuando clik sobre el picture.box . Lo consigo pero antes de que se empiece a mover o cuando ya se ha parado , pero no en movimineto . ¿¿?? ¿Alguien me ayuda ?? Gracias  


12-Oct-2013 21:26
Nacho Cabanes (+32)

Sin ver el código no puedo opinar. Quizá estés mirando coordenadas dentro del formulario, en vez de usar el evento Clic del PictureBox, pero insisto, necesitaría ver el código para poder saber con certeza qué está pasando.


14-Oct-2013 08:36
Invitado (serafín)

hola Nacho ,  muchas gracias , mira el objeto se mueve por la pantalla con 5 botones de comando. Es decir , pulsando a un comando ( clik) sale el objeto con una u otra trayectoria y hasta que no llega al final no funciona ningún otro clik . Yo lo que quiero es que si hago click al picture box que se va moviendo por la pantalla cambie su imagen ( la imagen es un plato de tiro al plato y quiero que si hago clik cambiar a una imagen de plato roto) , lo consigo cuando se para ( llega al final del loop for) pero no cuando se va moviendo y está en el loop . Muchas gracias Nacho por tu interés.
Serafín ,


14-Oct-2013 11:02
Invitado (SErafin)


Hola Nacho te mando el código ,  gracias

 
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 WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            int x, y, i;
            InitializeComponent();
            x = 0;
            y = 0;
            i = 0;
        }
 
        public void pictureBox2_Click(object sender, EventArgs e)
        {
            pictureBox2.Image =
WindowsFormsApplication2.Properties.Resources.imagesCAVQPG5X;
 
                   }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void button2_Click(object sender, EventArgs e)
 
        {
            int x;
                for (x = 12; x < 600; x++)
 
                {
                    pictureBox2.Location = new Point(x, 700-x);
                    for ( int j = 0; j < 100; j++)
                    {
                        pictureBox2.Location = new Point(x,700-x);
 
 
 
                    }
                }
 
            }
 
 
 
 
        private void button1_Click(object sender, EventArgs e)
        {int x;
                for (x = 12; x < 1350; x++)
 
                {
 
                    pictureBox2.Location = new Point(x, 700-x/3);
                    for ( int j = 0; j < 200000; j++)
                    {
                        if (pictureBox2.Enabled=false)
                        { return;
                        }
                        pictureBox2.Location = new Point(x,700-x/3);
 
 
 
 
                    }
                }
 
 
 
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            int x;
                for (x = 12; x < 600; x++)
 
                {
                    pictureBox2.Location = new Point(x, 700-x);
                    for ( int j = 0; j < 1; j++)
                    {
                        pictureBox2.Location = new Point(x,700-x);
 
 
 
 
                    }
                }
 
 
        }
 
        private void button4_Click(object sender, EventArgs e)
        {int x;
                for (x = 12; x < 600; x++)
 
                {
                    pictureBox2.Location = new Point(x, 700-x);
                    for ( int j = 0; j < 1; j++)
                    {
 
 
 
 
 
                    }
                }
 
 
 
        }
 
        private void button5_Click(object sender, EventArgs e)
        {
int x;
                for (x = 12; x < 600; x++)
 
                {
                    pictureBox2.Location = new Point(x, 700-x);
                    for ( int j = 0; j < 1; j++)
                    {
                        pictureBox2.Location = new Point(x,700-x);
 
 
 
 
                    }
                }
 
 
        }
 
        private void pictureBox2_BackgroundImageChanged(object sender, EventArgs e)
        {
            pictureBox2.Image =
WindowsFormsApplication2.Properties.Resources.imagesCAVQPG5X;
        }
 
        }
    }
 




18-Oct-2013 01:10
Nacho Cabanes (+32)

Ya veo cosas... que no me gustan... ;-)

Por una parte, está mal tabulado y cuesta de leer.

Por otra parte, en un entorno interactivo, como Windows, no deberías mover cosas por pantalla con un "for", porque "bloqueas" todo lo demás. La forma elegante es crear un temporizador, de forma que cada cierto tiempo se llame a una función que calcule la nueva posición y redibuje. Una alternativa mala (pero que al menos puede llegar a funcionar) es permitir que el sistema procese los mensajes pendientes al final de cada pasada por el bucle "for". Pero insisto: deberías mirar los temporizadores si quieres que realmente se comporte de forma interactiva y predecible.

En cualquier caso, deberías tener un evento Click que cambiara la imagen, y el tuyo siempre muestra la misma. Podrías preparar un array de imágenes y usar un contador para saber cuál es la actual y, por tanto, cual es la siguiente que habrá que mostrar cuando se haga clic.


21-Oct-2013 09:05
Invitado (SERAFIN)

Muchas gracias Nacho , intentaré seguir tus consejos . Un abrazo,






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)