如何确定MDI子表单的屏幕位置?

时间:2010-08-29 00:03:18

标签: c# winforms

我有一个主要形式'MainForm',IsMdiContainer = true

我有一个或多个动态创建的子窗体,我设置了MdiParent = MainForm

现在我想做的是能够通过设置MdiParent = null来分离这些子窗体,但保持完全相同的屏幕位置。

我尝试过使用ChildForm.PointToScreen(ChildForm.Location),但这会给我相对于表单客户区的屏幕位置。

修改

表单上的PointToScreen()给我几乎正确的位置,除了它在窗体内提供0,0的屏幕位置,而.Location指的是窗体的外边缘。

1 个答案:

答案 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上的轻微偏移,也无法避免闪烁。