Я хочу перетащить средства управления на панели, и при перетаскивании я хочу переместить управление и заставить его местоположение отбрасывать на панели. Я испытал mouseUp, mouseDown, События mouseMove управления. Но это не то, что я ищу. Я хочу запустить событие DragDrop в управление перемещением и панель. Я могу сделать это? Если можно дать мне идею, это будет большим. Ниже часть моего кода. Исправьте меня.Большое спасибо.
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 DragnDrop
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Control mycontrol;
int x, y;
//Form1 f = new Form1();
private void Form1_Load(object sender, EventArgs e)
{
foreach (Control c in this.panel1.Controls)
{
c.MouseMove += new MouseEventHandler(lblDragger_MouseMove);
c.MouseUp += new MouseEventHandler(lblDragger_MouseUp);
c.MouseDown += new MouseEventHandler(pictureBox1_MouseDown);
c.MouseDoubleClick += new MouseEventHandler(pictureBox1_MouseDown);
}
panel2.AllowDrop = true;
foreach (Control c in this.panel2.Controls)
{
c.MouseDown += new MouseEventHandler(pictureBox1_MouseDown);
}
panel2.DragOver += new DragEventHandler(panel2_DragOver);
panel2.DragDrop += new DragEventHandler(panel2_DragDrop);
}
bool isDragging ;
int clickOffsetX ;
int clickOffsetY ;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
// this.Cursor = Cursors.SizeAll;
//pictureBox1 = (PictureBox)sender;
Control c = sender as Control;
//DoDragDrop(pictureBox1.Image, DragDropEffects.Copy);
// validation = true;
isDragging = true;
clickOffsetX = e.X;
clickOffsetY = e.Y;
// c.DoDragDrop(c, DragDropEffects.Move);
}
private void lblDragger_MouseUp(System.Object sender, System.Windows.Forms.MouseEventArgs e)
{
isDragging = false;
}
private void panel2_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(Bitmap)))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void panel2_DragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
private void panel2_DragDrop(object sender, DragEventArgs e)
{
Control c = e.Data.GetData(e.Data.GetFormats()[0]) as Control;
mycontrol = c;
if (c != null)
{
c.Location = this.panel2.PointToClient(new Point(e.X, e.Y));
this.panel2.Controls.Add(c);
}
}
private void lblDragger_MouseMove(System.Object sender,
System.Windows.Forms.MouseEventArgs e)
{
Control c = sender as Control;
// bool isDragging = true;
if (isDragging == true)
{
c.Left = e.X + c.Left - clickOffsetX;
c.Top = e.Y + c.Top - clickOffsetY;
}
}
private void panel1_MouseLeave(object sender, EventArgs e)
{
Control c = sender as Control;
c.DoDragDrop(c, DragDropEffects.Move);
}
}
}
Если ваш элемент управления уже находится на панели, и вы просто перемещаете его внутри той же панели, то, вероятно, самый простой способ сделать это - использовать события мыши. Я понимаю, что перетаскивание больше связано с передачей данных между элементами управления или даже приложениями. Перетаскивание подойдет, например, если вы пытаетесь разрешить передачу элемента управления между панелями.
Если вы хотите сделать и то, и другое, то вот одна из возможных идей:
Выполните перетаскивание с перемещением внутри той же панели, используя события мыши.
Когда вы получаете событие MouseLeave на панели, начинайте операцию DragDrop (некоторые примеры здесь ). Вы можете либо удалить элемент управления с панели, либо добавить какой-то эффект «серого», чтобы указать, что контроль может уйти.
Обработайте DragDrop на целевой панели и поместите элемент управления в то место, где находится перетаскивание.
Это сочетает в себе интуитивное ощущение перетаскивания элемента управления, а также дает возможность «перетащить» панель на новую поверхность.
Вам нужно использовать события "мышь вверх" и "мышь вниз" для переключения состояния перетаскивания. Когда вы нажимаете кнопку мыши вниз, вы начинаете перетаскивание. Вы фиксируете относительное положение мыши внутри вашего элемента управления и относительное положение вашего элемента управления на панели. Затем вы следуете за мышью по мере ее перемещения и переставляете верхнюю и левую части элемента управления относительно исходного положения мыши внутри вашего элемента управления.