在辅助屏幕上居中 C# 窗体

Center C# form on secondary screen

小问题,希望能轻松解决。 我是 C# 的新手,正在尝试将第二个表单居中,在第二个屏幕打开时。到目前为止,我可以让它在第二个屏幕上打开没问题,但它位于左上角,我无法让它居中。我知道 Location = Screen.AllScreens[1].WorkingArea.Location; 会将其放在所述工作区的左上角。我想知道是否有办法(基本上)将 .Location 更改为无论实际屏幕尺寸如何都会居中的其他内容?这将在具有不同屏幕尺寸的多个不同系统上进行。 这是我到目前为止的代码。

在第一个表格上。

public partial class FrmPrompt : Form
{
    public FrmPrompt()
    {
        InitializeComponent();
    }

    private void ButNo_Click(object sender, EventArgs e)
    {
        frmConfirm confirm = new frmConfirm();
        Screen[] screens = Screen.AllScreens;
        lblConfirmMsg.Text = "Please Wait For Customer To Confirm...";
        butContinue.Hide();
        confirm.Show();
    }
}

关于第二种形式:

public partial class frmConfirm : Form
{
    public frmConfirm()
    {
        InitializeComponent();
        Location = Screen.AllScreens[1].WorkingArea.Location;
    }

    private void pictureBox1_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }
}

谢谢!

在第一种形式上试试这个,不需要在第二种形式中设置任何东西。

        //put it after this line: frmConfirm confirm = new frmConfirm();
        confirm.StartPosition = FormStartPosition.CenterScreen;

CenterScreen 将在 当前 屏幕上找到表单,因此如果您的 FrmPrompt 在第二个屏幕上,当您单击 ButNo - 这将工作。不过我觉得这不是你要的

除此之外,CenterScreen 将覆盖 显示方法调用之前设置的任何位置设置.所以我建议覆盖 frmConfirm

的 OnShown 方法
protected override void OnShown(EventArgs e)
{
    base.OnShown(e);
    var area = Screen.AllScreens[1].WorkingArea;
    var location = area.Location;

    location.Offset((area.Width - Width) / 2, (area.Height - Height) / 2);
    Location = location;
}