10

我有一个带有 2 forms、主窗口和第二个的应用程序Form

我想要的是Form在 a 上打开第二个button click,它的位置必须在主窗体旁边(所以如果主窗体很600px宽,X新的Form将是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不是属性正确?

4

3 回答 3

16

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

StartPosition = FormStartPosition.Manual;
于 2013-01-12T17:54:29.013 回答
5

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

正确的方法是等待 Load 事件触发,然后重新缩放并且窗口尚不可见。这是将其移动到正确位置的最佳时间。StartPosition 现在不再重要。像这样:

        var frm = new SecondForm();
        frm.Load += delegate {
            frm.Location = new Point(this.Right, this.Top);
        };
        frm.Show();
于 2013-01-12T18:38:03.487 回答
4

Location是正确的属性,但你必须设置

Form.StartPosition = FormStartPosition.Manual;

也。

于 2013-01-12T17:54:45.943 回答