Winforms Location

本文关键字:Location Winforms | 更新日期: 2023-09-27 17:52:11

我有一个应用程序与2 forms,主窗口和第二个Form

我想要的是在button click上打开第二个Form,它的位置必须在主形式的右边(所以如果主形式是600px宽,新的FormX将是main.X + 600)

我试过了,但它似乎不接受,它仍然在主表单的顶部打开:

private void button1_Click(object sender, EventArgs e)
{
    var form = new SecondForm();
    var main = this.Location;
    form.Location = new Point((main.X + 600), main.Y);
    form.Show(); 
}

Location不是正确的属性?

Winforms Location

设置表单的StartPositionFormStartPosition.Manual。您可以在设计器或构造器中执行此操作:

StartPosition = FormStartPosition.Manual;

Location为右属性,但必须设置

Form.StartPosition = FormStartPosition.Manual;

显然你没有考虑StartPosition属性。然而,将其更改为手动并不是正确的解决方案,您加载的第二种形式可能会在另一台具有不同视频DPI设置的机器上重新缩放。现在很常见。这反过来又可以改变它的Location属性。

正确的方法是等待Load事件触发,然后重新缩放完成,窗口还不可见。这是把它移到正确位置的最佳时间。StartPosition现在不再重要了。这样的:

        var frm = new SecondForm();
        frm.Load += delegate {
            frm.Location = new Point(this.Right, this.Top);
        };
        frm.Show();