Winforms位置

我有一个带有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不是正确的属性吗?

将表单的StartPosition设置为FormStartPosition.Manual 。 您可以在设计器或构造函数中执行此操作:

 StartPosition = FormStartPosition.Manual; 

显然你没有指望StartPosition属性。 但是,将其更改为手动不是正确的修复,您加载的第二种forms可能会在具有不同videoDPI设置的另一台机器上重新调整自身。 这些天很常见。 这又可以改变其Location属性。

正确的方法是等待Load事件触发,然后重新缩放,窗口仍然不可见。 哪个是在正确的地方移动它的最佳时间。 StartPosition现在不再重要。 像这样:

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

Location是正确的财产,但你必须设置

 Form.StartPosition = FormStartPosition.Manual; 

太。