Winforms 从另一个子窗口显示新的子窗口,但将其置于父窗口的中心

Winforms 从另一个子窗口显示新的子窗口,但将其置于父窗口的中心,winforms,position,center,showdialog,Winforms,Position,Center,Showdialog,我有一个winforms应用程序,它有一个主窗体(fMain)和两个子窗体(fLogin和fAdmin)。fLogin使用以下代码显示,该代码位于主窗体上按钮的按钮单击事件处理程序中: // show login form; pass the main form in as an argument fLogin formLogin = new fLogin(this); formLogin.StartPosition = FormStartPosition.CenterParent; formL

我有一个winforms应用程序,它有一个主窗体(fMain)和两个子窗体(fLogin和fAdmin)。fLogin使用以下代码显示,该代码位于主窗体上按钮的按钮单击事件处理程序中:

// show login form; pass the main form in as an argument
fLogin formLogin = new fLogin(this);
formLogin.StartPosition = FormStartPosition.CenterParent;
formLogin.ShowDialog(this);
在fLogin的构造函数中,我将主窗体分配给一个私有成员级变量

// fLogin
fMain _mainForm;

// fLogin constructor
public fLogin(fMain mainForm)
{
    InitializeComponent();
    _mainForm = mainForm;
}
正如您可能想象的那样,fLogin是一个小表单,包含用于输入用户名和密码的文本框以及几个按钮。当我的用户输入他们的凭据并单击OK按钮时,fLogin将通过服务器验证信息,如果信息良好,fLogin将消失,并显示fAdmin。目前,我正在显示fAdmin,如下所示:

// hide formLogin right away
this.Hide()

// show admin form
fAdmin formAdmin = new fAdmin();
formAdmin.StartPosition = FormStartPosition.CenterParent;
formAdmin.Show(_mainForm); // pass main form as owner of admin form

// close formLogin
this.Close();

我无法设置formAdmin.Parent=\u mainForm并使对话框神奇地居中。因此,我将_mainForm传递给formAdmin.Show(),作为formAdmin的所有者,但这似乎对以formAdmin为中心没有帮助。有没有一种简单的方法可以使formAdmin显示在主窗体的中心?

我认为您需要稍微调整一下执行此操作的方式,而不是从fLogin中显示fAdmin,关闭fLogin,然后从fMain中打开fAdmin。如果这不起作用,您可以通过计算fAdmin左上角的点手动居中,并将该点设置为fAdmin的位置。在过去遇到类似问题时,我不得不这样做。要计算fAdmin的左上角,使其以fMain为中心,请使用以下公式:

Point p = new Point(0, 0);
p.Y = (fMain.Height / 2) - (fAdmin.Height / 2);
p.X = (fMain.Width / 2) - (fAdmin.Width / 2);
fAdmin.Location = p;