2011-07-07 32 views
44

在其父級窗體的中心顯示DialogBox一直很麻煩。這是一個顯示對話框的方法。在其父級的中心顯示對話框

我定位其父到中心,但不能居中對話框

private void OpenForm(Object point, Object height, Object width) 
{ 
    FormLoading frm = new FormLoading(); 
    Point temp = (Point)point; 
    Point location = new Point(temp.X + (int)((int)width)/2, 
           temp.Y + (int)((int)height)/2); 
    frm.Location = location; 
    frm.ShowDialog(); 
} 

private void btnView_Click(object sender, EventArgs e) 
{ 
    try 
    {      
     ThreadStart starter= delegate { OpenForm(currentScreenLocation, 
               this.Height, this.Width); }; 
     Thread t = new Thread(starter); 
     t.Start(); 
     ////// Some functionality here... 
     t.Abort(); 
    } 
    catch (Exception) 
    { 
    } 
} 
+2

我也會小心多線程。控件的屬性(至少那些處理用戶界面的屬性)只能從創建它們的線程改變。我在這裏看不到更大的圖片,所以我不知道你爲什麼要在自己的主題中創建每個表單,但要牢記這一點。 –

回答

80

你可能要檢查的Form.StartPosition屬性。

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.startposition.aspx

東西沿着線:

private void OpenForm(Form parent) 
{ 
    FormLoading frm = new FormLoading(); 
    frm.Parent = parent; 
    frm.StartPosition = FormStartPosition.CenterParent; 
    frm.ShowDialog(); 
} 

當然,這需要設置窗體的父。

+0

frm.StartPosition = FormStartPosition.Manual; frm.Location = location; 我用它併爲我工作:) –

+0

將其設置爲FormStartPosition.CenterParent爲您做數學。但是我想如果你打算做比中心更復雜的事情,你會想保留你的代碼。我很高興你解決了你的問題。 –

+0

FormStartPosition.CenterParent不適用於我。我只是想把它居中。但是你提供的鏈接對我來說是一個關鍵。感謝那 –

4

另外,如果你想設置的任意位置,您可以使用此

FormLoading frm = new FormLoading(); 
Point location = new Point(300, 400); 
frm.StartPosition = System.Windows.Forms.FormStartPosition.Manual; 
frm.Location = location; 
frm.ShowDialog(); 
1
NewForm.Show(); 

NewForm.Top = (this.Top + (this.Height/2)) - NewForm.Height/2; 
NewForm.Left = (this.Left + (this.Width/2)) - NewForm.Width/2; 
1

,如果你是一個定製的消息框,你可以簡單地把這個:

CenterToParent(); 

在您的自定義MessageBox formload()方法中。