我有一个类库,其中包含一个“MessageBox”等价物,还有一些花里胡哨的东西。
如果我调用该ShowDialog(IWin32Owner)
方法,则此方法有效,并且表单将显示在我的父表单的中心。
然而,有时,这个表单是从我的项目中的一个类中调用的,所以我无权访问表单所有者。在这种情况下,我可以传递null
给该ShowDialog()
方法,但它似乎无法识别“当前活动窗口”并将其显示在中心。我假设是因为它在另一个类库中。
那么有什么方法可以获取用户正在处理的当前活动表单(或至少是屏幕)?
编辑
好的,这更多地与 FormStartPosition 枚举有关。
如果我使用CentreScreen
它,则应根据 MSDN 默认为当前活动的监视器。但是,如果表单在类库中,这似乎默认为默认监视器。
好的:
这是有问题的代码:无法将表单设置为中心屏幕:
public static DialogResult ShowYesNoCancel(string message)
{
using (frmMessage form = new frmMessage())
{
form.Text = @"Input Required";
form.lblMessage.Text = message;
form.btnNo.Visible = true;
form.btnOK.Text = @"Yes";
form.btnOK.DialogResult = DialogResult.Yes;
form.StartPosition = FormStartPosition.CenterScreen;
return form.ShowDialog();
}
}
一个解法:
/// <summary>
/// Overridden to ensure its in the centre of the current screen
/// </summary>
/// <returns></returns>
public new DialogResult ShowDialog()
{
Screen current = Screen.FromPoint(MousePosition);
Rectangle s = current.WorkingArea;
StartPosition = FormStartPosition.Manual;
Location = new Point(s.Left + s.Width / 2 - Width / 2, s.Top + s.Height / 2 - Height / 2);
return base.ShowDialog();
}