2012-07-20 115 views
0

我無法讓子窗體以它的父窗體爲中心。我一直在嘗試各種各樣的建議,從使用ShowDialog或不使用ShowDialog到各種各樣的「計算你的表單的位置」代碼。C#CenterParent使用ShowDialog不起作用

這真的不應該如此複雜,我想。

無論如何,這裏有一些代碼。下面的代碼是我實例化表單並要求它打開的地方。此代碼中的this是MainForm。

FormName myForm = new FormName(); 
myForm.ShowDialog(this); 

我已經設置窗體的StartPositionCenterParent但如果我四處移動MainForm,然後重新打開窗體,它不跟隨。事實上,它保持正確的位置,無論如何。它甚至不是中心屏幕!

在窗體的構造函數中,我沒有設置表單的位置。

我也不會在窗體的Load方法中設置窗體的位置。

請幫忙!

編輯: 我試過單步通過構造函數並加載窗體的方法,看他們是否完成前救援,他們工作得很好。

+2

您可能需要張貼更多代碼。這對我來說每次都適用。 – dlev 2012-07-20 23:14:43

+0

你想看什麼代碼? – Kashif 2012-07-20 23:21:06

回答

4

事實證明,向表單的構造函數添加代碼是一個糟糕的主意,並會導致各種奇怪的行爲。而應該在Form Load事件中添加表單的代碼。這是我的問題的根源。

+1

感謝這個soln,我一直試圖很長時間纔得到這個正確的,但正如你所提到的,它必須在代碼中明確定義。如果你從屬性中設置它,它甚至不會工作 – electricalbah 2013-07-23 05:14:47

0

下面的代碼工作正常,我:

var MainForm = new Form(); 
var SubForm = new Form { 
    StartPosition = FormStartPosition.CenterParent, 
    Width = 200, 
    Height = 200, 
}; 

MainForm.MouseClick += (sender, args) => { SubForm.ShowDialog(MainForm); }; 
MainForm.Show(); 

當您雙擊它的MainForm中心打開它的子​​窗體。然後,當您關閉子窗體並移動MainForm時,再次雙擊MainForm時,SubForm再次顯示居中到MainForm。

+0

嗨@luisprerezphd,本質上這是我使用的相同的代碼。你的只是非常集中,我通過resx和MainForm.cs文件 – Kashif 2012-07-20 23:31:16

+0

@Kashif傳播,據我所知,唯一的兩件事情就是該子表單的StartPosition設置爲FormStartPosition.CenterParent,它使用'ShowDialog()'顯示,並且你想要的中心窗體作爲參數傳遞。如果不是中心,應該在調用ShowDialog()之前運行調試器來檢查子窗體上的「StartPosition」的值。你現在如何分配'StartPosition'? – 2012-07-20 23:43:26

+0

我通過表單的屬性分配'StartPosition'字段 – Kashif 2012-07-21 00:51:23