有一个主窗体FORM,下面有两个多文档子窗体,怎么用C#实现相互之间控件的拖动啊?
解决方案 »
- C# 网页中 怎么用用手机号和邮件都可以做登录用户名
- 大家一起来找碴,这两个结构体,有什么不多。
- Winform ComboBox [选择与显示] 再来100分继续问 不急 就当个课余题做
- 如何将元字符插入到SQL库中?
- 怎么实现:按纽上一个图标,点这个按纽之后,变成另外一个图标啊
- WinForm中隐藏Datagrid中的一列,有简单的方法吗?
- 请教一下VB.NET如何顺利向C#过渡
- 求《c#数据安全手册》和另一本书的代码。
- .NET Framework SDK可以在什么操作系统上运行。WIN9X行吗?内存配置有没有要求
- 怎么从access数据库里获得指定表的字段名?
- C#调用Dll,调试速度奇慢
- 遍历的小问题
:-) 猜的!!
{
protected Control control; public MovingObject(Control ctrl)
{
control = ctrl;
} public Control MovingControl
{
get { return control; }
}
}
再封装一个Helper类 public class User32
{
[DllImport("User32.dll")]
public static extern int GetWindowRect(IntPtr handle, ref Rectangle rect);
}
OK, 现在随便写一个Form2作为Test用的一个子窗体, 上面只摆一个ListBox控件 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控件 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哦~ 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可以在两个窗体间自由的拖动没?