在其父级中心显示对话框

Tau*_*han 49 c# positioning center .net-4.0 winforms

在其父窗体的中心显示一个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)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

Kor*_*tak 99

您可能想要查看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();
}
Run Code Online (Sandbox Code Playgroud)

这当然需要设置表单的父级.

  • `frm.Parent = parent;`不起作用,但是删除那行代码仍然可以正常运行..父东西给出了一个无法修复的顶级错误.`顶级控件无法添加到控件中 (21认同)
  • 如果你得到'顶级控件无法添加...'异常请尝试设置所有者:`frm.Owner = parent;` (3认同)

Moh*_*n K 5

如果您正在制作自定义 MessageBox,您可以简单地输入:

CenterToParent();
Run Code Online (Sandbox Code Playgroud)

在您的自定义 MessageBoxformload()方法中。