原作者:
C# code

public class MovingObject
{
protected Control control;

public MovingObject(Control ctrl)
{
control
= ctrl;
}

public Control MovingControl
{
get { return control; }
}
}



再封装一个Helper类
C# code

public class User32
{
[DllImport(
"User32.dll")]
public static extern int GetWindowRect(IntPtr handle, ref Rectangle rect);
}



OK, 现在随便写一个Form2作为Test用的一个子窗体, 上面只摆一个ListBox控件
C# code

public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
AllowDrop
= true;

listBox1.MouseDown
+= new MouseEventHandler(listBox1_MouseDown);
DragEnter
+= new DragEventHandler(Form2_DragEnter);
DragDrop
+= new DragEventHandler(Form2_DragDrop);
}

void Form2_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(MovingObject)))
{
MovingObject movingObj
= e.Data.GetData(typeof(MovingObject)) as MovingObject;
if (movingObj != null)
{
Rectangle rect
= Rectangle.Empty;
User32.GetWindowRect(Handle,
ref rect);
movingObj.MovingControl.Location
= new Point(e.X - rect.Location.X - 6, e.Y - rect.Location.Y - 34);
Controls.Add(movingObj.MovingControl);
}
}
}

void Form2_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(MovingObject)))
e.Effect
= DragDropEffects.Copy;
}

void listBox1_MouseDown(object sender, MouseEventArgs e)
{
DoDragDrop(
new MovingObject(listBox1), DragDropEffects.Copy);
}
}



同样, 写一个Form3的子窗体, 上面只有一个Button控件
C# code

public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
AllowDrop
= true;

button1.MouseDown
+= new MouseEventHandler(button1_MouseDown);
DragEnter
+= new DragEventHandler(Form3_DragEnter);
DragDrop
+= new DragEventHandler(Form3_DragDrop);
}

void Form3_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(MovingObject)))
{
MovingObject movingObj
= e.Data.GetData(typeof(MovingObject)) as MovingObject;
if (movingObj != null)
{
Rectangle rect
= Rectangle.Empty;
User32.GetWindowRect(Handle,
ref rect);
movingObj.MovingControl.Location
= new Point(e.X - rect.Location.X - 6, e.Y - rect.Location.Y - 34);
Controls.Add(movingObj.MovingControl);
}
}
}

void Form3_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(MovingObject)))
e.Effect
= DragDropEffects.Copy;
}

void button1_MouseDown(object sender, MouseEventArgs e)
{
DoDragDrop(
new MovingObject(button1), DragDropEffects.Copy);
}
}



好, 现在再弄个MainForm出来, 就叫做Form1吧, 记得要把Form1的IsMdiContainer设为True哦~
C# code

public partial class Form1 : Form
{
private Form2 f2;
private Form3 f3;

public Form1()
{
InitializeComponent();

f2
= new Form2();
f3
= new Form3();

f2.MdiParent
= this;
f3.MdiParent
= this;

f2.Show();
f3.Show();
}
}




怎么样? 发现button1和listBox1可以在两个窗体间自由的拖动没?

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-05-31
  • 2022-12-23
  • 2021-11-19
  • 2022-12-23
  • 2022-12-23
  • 2021-08-18
猜你喜欢
  • 2021-12-20
  • 2022-12-23
  • 2022-12-23
  • 2021-10-01
  • 2021-06-16
  • 2022-01-14
  • 2021-11-09
相关资源
相似解决方案