2011-10-20 80 views
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是一个带有用户名和密码以及几个按钮的文本框的小表单。当我的用户输入他们的凭证并单击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 = _mainForm并获得对话框神奇中心本身。因此,我将_mainForm作为formAdmin的所有者传递给formAdmin.Show(),但似乎并没有帮助让formAdmin居中。是否有一种简单的方法可以让formAdmin显示在主窗体的中心?

回答

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; 
+0

这两个好主意。非常感谢你。 – user685869