代码之家  ›  专栏  ›  技术社区  ›  Thomas Kjørnes

如何确定MDI子窗体的屏幕位置?

  •  0
  • Thomas Kjørnes  · 技术社区  · 14 年前

    我有一个主窗体“mainForm”,ismdicontainer=true

    我有一个或多个动态创建的子窗体,其中我设置了mdiparent=mainform

    现在我要做的是,通过设置mdiparent=null,但保持完全相同的屏幕位置,可以分离这些子窗体。

    我试过使用childform.pointtoscreen(childform.location),但它给出了相对于窗体的客户端区域的屏幕位置。

    编辑

    表单上的pointToScreen()几乎给出了正确的位置,只是它给出了表单内屏幕位置0,0,而.location是指表单的外边缘。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Hans Passant    14 年前

    您必须使用父级的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上得到的轻微偏移,也无法避免闪烁。