2011-07-07 14 views
44

Thật là một mớ hỗn độn khi hiển thị Hộp thoại ở giữa biểu mẫu gốc. Đây là một phương pháp để hiển thị một hộp thoại.Hiển thị hộp thoại ở trung tâm của phụ huynh

Tôi đang định vị mẹ của nó để tập trung nhưng không có khả năng tập trung các 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

Tôi cũng sẽ cẩn thận với đa luồng. Các thuộc tính của Control (ít nhất là các thuộc tính đối phó với giao diện User) chỉ có thể được thay đổi từ chuỗi mà chúng được tạo ra. Tôi không nhìn thấy một bức tranh lớn hơn ở đây vì vậy tôi không biết tại sao bạn tạo ra mỗi hình thức trong chủ đề riêng của nó, nhưng hãy ghi nhớ điều đó. –

Trả lời

80

Bạn có thể muốn kiểm tra Form.StartPosition tài sản.

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

cái gì đó dọc theo dòng:

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

Điều này tất nhiên đòi hỏi thiết lập phụ huynh của mẫu.

+0

frm.StartPosition = FormStartPosition.Manual; frm.Location = location; Tôi đã sử dụng và làm việc cho tôi :) –

+0

Đặt nó thành FormStartPosition.CenterParent thực hiện phép tính cho bạn. Nhưng tôi đoán bạn sẽ muốn giữ lại mã của bạn nếu bạn có kế hoạch làm bất cứ điều gì phức tạp hơn so với định tâm. Tôi rất vui vì bạn đã giải quyết được vấn đề của mình. –

+0

FormStartPosition.CenterParent không hoạt động đối với tôi. Tôi chỉ muốn tập trung vào nó. Nhưng liên kết được cung cấp của bạn là chìa khóa cho tôi. Cảm ơn vì điều đó –

4

Bên cạnh đó, nếu bạn muốn thiết lập vị trí tùy ý bạn có thể sử dụng

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

nếu bạn đang làm cho một MessageBox tùy chỉnh, bạn có thể dễ dàng đặt này:

CenterToParent(); 

trong tùy chỉnh của bạn MessageBox formload() phương pháp.