2010-08-29 56 views
0

我有一個的IsMdiContainer一個主窗體MainForm的'=真如何確定MDI子窗體的屏幕位置?

我有一個或多個動態創建,我設置子窗體的MdiParent =的MainForm

現在我想要做的是能脫離這些子表單通過設置MdiParent = null,但保持完全相同的屏幕位置。我試過使用ChildForm.PointToScreen(ChildForm.Location),但是這給了我相對於窗體的客戶區的屏幕位置。

EDIT

PointToScreen()的形式在其自身上給我幾乎正確的位置,但它給出0,0的形式內的屏幕的位置,而.Location指的外邊緣形成。

回答

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得到的,也不閃爍。

+0

這不起作用,因爲我有其他物品停靠在'MainForm'中。上面的代碼將把窗體的位置定位到與之前的MdiClient區域相同的'MainForm'相對距離。 – 2010-08-29 12:03:42

+0

您必須找到MdiClient窗口,以便您可以使用其PointToScreen方法。通過迭代父級控件集合來查找它,使用「is MdiClient」進行測試。或者只是調整位置。 – 2010-08-29 12:14:49

+0

已發佈片斷已更新。 – 2010-08-29 12:23:19