我有一个适合1280x800的MDI父容器(表单样式:无)。子表单适合于内部,例如,在子边缘和父级之间可能有1或2个像素填充。意思是看起来无缝。
我知道如何使单独的表单可拖动(无论您在表单上单击并按住的位置),但是是否可以让孩子指示MDI父级在屏幕上移动?原因是用户可以单击父级上没有任何内容。我们不能将对象添加到父对象(如菜单),因为它会与我们的设计冲突。
关于这一个的建议?目标是用户可以点击并拖动孩子的任何地方,它将移动整个应用程序。
答案 0 :(得分:1)
试试这个:
public partial class Form1 : Form {
private const int WM_NCLBUTTONDOWN = 0xA1;
private const int HT_CAPTION = 0x2;
[DllImportAttribute("user32.dll")]
private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
private static extern bool ReleaseCapture();
public Form1() {
InitializeComponent();
Form f = new Form();
f.MouseDown += ChildForm_MouseDown;
f.MdiParent = this;
f.Show();
}
void ChildForm_MouseDown(object sender, MouseEventArgs e) {
if (e.Button == MouseButtons.Left) {
ReleaseCapture();
SendMessage(this.Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
}
MDI Parent表单正在监听子mousedown事件,当用户单击子表单时,它就像用户点击主表单的标题栏一样。