0

我有一个带有主窗体(fMain)和两个子窗体(fLogin 和 fAdmin)的 winforms 应用程序。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 是一个带有用于用户名和密码的文本框以及几个按钮的小表单。当我的用户输入他们的凭据并单击确定按钮时,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 = _mainForm 并使对话框神奇地居中。因此,我将 _mainForm 作为 formAdmin 的所有者传递给 formAdmin.Show() ,但这似乎无助于让 formAdmin 居中。有没有一种简单的方法可以让 formAdmin 显示在主窗体的中心?

4

1 回答 1

1

我认为您需要稍微调整一下执行此操作的方式,而不是从 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;
于 2011-10-20T20:14:31.890 回答