Está en la página 1de 6

namespace AS1 { publicpartialclass Form1 : Form { intxini, yini; public Form1() { InitializeComponent();

} private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { pictureBox1.DoDragDrop(pictureBox1, DragDropEffects.Move); xini = pictureBox1.Location.X; yini = pictureBox1.Location.Y; } private void Form1_DragOver(object sender, DragEventArgs e) { Point origen = new Point(e.X-xini, e.Y-yini); pictureBox1.Location = origen;

private void Form1_DragDrop(object sender, DragEventArgs e) { Point origen = new Point(e.X, e.Y); pictureBox1.Location = origen; }

Hola a tod@s. Soy nuevo en programacion con C# y estoy probando cosas basicas, concretamente lo que quiero ahora es poder arrastrar y soltar algun control en tiempo de ejecucion.En verdad lo tengo hecho pero funciona malamente. Se trata de una aplicacion tonta en la que aperece un picturebox con una imagen cargada y lo unico que quiero es poder moverla con drag-drog por el formulario.Como ya he dicho funciona pero no como a mi me gustaria, el problema es que al empezar a arrastrar el picture box me gustaria que este se moviese en armonia con el cursor del raton pero en su lugar el picturebox se va para un lado y el cursor del raton para otro aunque luego si se puede mover dicho picturebox. La verdad es que no tego muy claro los eventos que hacen falta para implementar lo de arrastrar y soltar ya que el codigo que tengo funciona de igual manera con el evento Form1_DragDrop que sin el. Gracias y saludos

o o

Responder Citar

Respue stas
lunes, 04 de mayo de 2009 18:51

4 Inicie sesin para votar

Hola Desprogramador.

Los eventos drag and dropestan pensados mas bien para arrastrar controles y acoplarlos en contenedores. Yo para realizar lo que quieres hacer, me baso en la antigua usanza, el control mediante las posiciones relativas. Tepongounejemplo:
public partial class Form1 : Form { privateboolbtnDown; privateintoffsetX; privateintoffsetY; public Form1() { InitializeComponent(); } private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { // elboton izquierdo esta pulsado if (e.Button == MouseButtons.Left) { btnDown = true; offsetX = e.X; offsetY = e.Y; } } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (btnDown) { // mover el pictureBox con el raton pictureBox1.Left += e.X - offsetX; pictureBox1.Top += e.Y - offsetY; } } private void pictureBox1_MouseUp(object sender, MouseEventArgs e) {

// elboton izquierdo se libera if (e.Button == MouseButtons.Left) { btnDown = false; } } }

De esta forma registro los offsets al pulsar con el boton sobre el control, ya que la posicion del mouse es relativa al control, luego en el evento 'mousemove' hago los calculospertinetes para posicionar relativo al offset. El control del boton lo registro mediante un flag para ver si esta pulsado o no. Esta es una de las formas. Espero te sirva de ayuda o guia para lo que quieres realizar Saludos.
o

Marcado como respuestaJuan Carlos Ruiz [BogotaDotNet.org]Moderatormircoles, 06 de mayo de 2009 16:14

o o

Responder Citar

Todas las respues tas


lunes, 04 de mayo de 2009 18:51

Inicie sesin para votar

Hola Desprogramador. Los eventos drag and dropestan pensados mas bien para arrastrar controles y acoplarlos en contenedores. Yo para realizar lo que quieres hacer, me baso en la antigua usanza, el control mediante las posiciones relativas. Tepongounejemplo:
public partial class Form1 : Form { privateboolbtnDown; privateintoffsetX; privateintoffsetY; public Form1() { InitializeComponent(); } private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { // elboton izquierdo esta pulsado if (e.Button == MouseButtons.Left) { btnDown = true; offsetX = e.X; offsetY = e.Y; } } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (btnDown) { // mover el pictureBox con el raton pictureBox1.Left += e.X - offsetX; pictureBox1.Top += e.Y - offsetY;

} } private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { // elboton izquierdo se libera if (e.Button == MouseButtons.Left) { btnDown = false; } } }

De esta forma registro los offsets al pulsar con el boton sobre el control, ya que la posicion del mouse es relativa al control, luego en el evento 'mousemove' hago los calculospertinetes para posicionar relativo al offset. El control del boton lo registro mediante un flag para ver si esta pulsado o no. Esta es una de las formas. Espero te sirva de ayuda o guia para lo que quieres realizar Saludos.

También podría gustarte