Показать диалоговое окно в центре его родителя - PullRequest
48 голосов
/ 07 июля 2011

Было беспорядочно показывать DialogBox в центре его родительской формы. Вот метод, чтобы показать диалог.

Я позиционирую его родителя по центру, но не могу центрировать 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)
    {
    }
}

Ответы [ 5 ]

93 голосов
/ 07 июля 2011

Возможно, вы захотите проверить свойство 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();
}

Это, конечно, требует установкиродитель формы.

10 голосов
/ 14 февраля 2013
4 голосов
/ 26 апреля 2013

Кроме того, если вы хотите установить произвольное местоположение, вы можете использовать это

FormLoading frm = new FormLoading();
Point location = new Point(300, 400);
frm.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
frm.Location = location;
frm.ShowDialog();
2 голосов
/ 30 января 2018

если вы создаете пользовательский MessageBox, вы можете просто поместить это:

CenterToParent();

в свой собственный метод MessageBox formload().

1 голос
/ 28 октября 2016
NewForm.Show();

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