我有一个主要形式'MainForm',IsMdiContainer = true
我有一个或多个动态创建的子窗体,我设置了MdiParent = MainForm
现在我想做的是能够通过设置MdiParent = null来分离这些子窗体,但保持完全相同的屏幕位置。
我尝试过使用ChildForm.PointToScreen(ChildForm.Location),但这会给我相对于表单客户区的屏幕位置。
修改
表单上的PointToScreen()给我几乎正确的位置,除了它在窗体内提供0,0的屏幕位置,而.Location指的是窗体的外边缘。
答案 0 :(得分:3)
您必须使用父级的mdi客户端窗口的PointToScreen()方法:
private void button1_Click(object sender, EventArgs e) {
if (this.MdiParent != null) {
MdiClient client = null;
foreach (Control ctl in this.MdiParent.Controls) {
if (ctl is MdiClient) { client = ctl as MdiClient; break; }
}
this.WindowState = FormWindowState.Normal;
Point loc = client.PointToScreen(this.Location);
this.MdiParent = null;
this.Location = loc;
}
}
您无法避免Aero上的轻微偏移,也无法避免闪烁。