En algunas ocasiones necesitamos
arrastrar dentro de nuestro programa algún tipo de objeto y con ello realizar
alguna acción determinada. El otro día estaba construyendo un programilla para
crear diagramas y algunas de las figuras que integro en estos diagramas no
pueden ser simples dibujos, sino que se tiene que poder añadir texto, responder
a acciones, y además tienen que ser movidos por toda la ventana. Esto último
implica una acción denominada “Drag & Drop” o nuestro idioma “arrastrar y colocar”.
Como de vez en cuando se me lía
la cabeza y hago las cosas un poco difíciles XD, este truco no va de cómo
utilizar el evento “DragDrop”, sino de cómo crear
el efecto, utilizando los eventos del ratón.
Lo primero de todo es tener
seleccionado el objeto que quieras mover por la ventana, te vas a sus
propiedades y pinchas en el icono del rayo. Nos colocamos (XD) en la sección de
Mouse y tenemos que hacer doble clic en los eventos de MouseDown, MouseUp y
MouseMove. La cosa quedaría de esta forma:
Ahora lo que tenemos que hacer es
añadir el siguiente código al control:
Boolean var; //Una
variable booleana
Point a; //Otra variable de tipo coordenada (x,y)
Las variables van declaradas
al principio de la clase, y dentro de los métodos que hemos creado vamos
escribiendo lo que viene a continuación:
private void control_MouseDown(object sender, MouseEventArgs
e)
{
var = true;
a = e.Location;
}
Con
las dos líneas anteriores simplemente ponemos la variable booleana a cierto
para indicar que se ha clickado el botón del ratón y le damos a la variable “a”
la posición del puntero del ratón.
private void control_MouseMove(object sender, MouseEventArgs
e)
{
if (var == true)
{
this.Left = e.X + this.Left;
this.Top =
e.Y + this.Top;
}
}
Cuando
se clicka le voy dando la distancia que se mueve el objeto en x e y, y la
posición que tenía anteriormente.
private void control _MouseUp(object sender, MouseEventArgs
e)
{
var = false;
}
Por ultimo cuando levanto el dedo
del ratón vuelvo a poner el booleano a falso.
Creo que es más efectivo utilizar
el evento que viene de DragDrop pero esto es a modo de curiosidad más que nada
que me aburría estudiando y entre lo que lees en Internet, lo que imagino y lo
que luego sale, armo de cada que no veas.
Un saludete
Deja una respuesta