准确地在第一个表格的位置显示第二个表格

从主窗体(Form1)我打电话来显示另一种forms(Form2)。 但我希望它显示与form1完全相同的位置和大小,这样我们就不能再看到form1,直到我们关闭form2或将其移动到其他地方。 所以我写了这些线:

Form2 f2 = new Form2(); f2.Left = this.Left; f2.Top = this.Top; f2.Size = this.Size; f2.Show(); 

但它仍然存在问题。 form2我们不完全在form1上。 我应该添加到代码中的任何其他东西?

是的,你这样做是错误的。 如果您运行此计算机的计算机具有完全相同的用户首选项,系统字体大小和videoDPI设置,则表单的实际大小仅与设计大小相同。 如果它很多,那么DPI设置就不同了。 如果它稍微偏离,则用户偏好不同。 像更大的标题栏字体或更大的按钮。 固定:

  Form2 f2 = new Form2(); f2.Show(); f2.Left = this.Left; f2.Top = this.Top; f2.Size = this.Size; 

如果那太明显了,那么你应该让Form2的Load事件做到这一点。 传递对主表单的引用或使用Owner属性和Show(所有者)。 换一种说法:

  Form2 f2 = new Form2(); f2.Show(this); 

在Form2中:

  protected override void OnLoad(EventArgs e) { base.OnLoad(e); this.Location = Owner.Location; this.Size = Owner.Size; } 

如果您不希望用户在Form2关闭之前与Form1交互,请将最后一行更改为

 f2.ShowDialog(); 

那么用户是否仍然可以看到Form1并不重要。 在Form2关闭之前,Windows不会让Form1再次获得焦点。

使用Form1显示与Form1具有相同大小和相同位置的Form2时会发生什么? Form1将是隐形的吗? 所以,为什么你不使用form1.Hide();

试试这个…

 Form2 f2 = new Form2(); f2.Show(); f2.SetBounds(this.Location.X, this.Location.Y,this.Width, this.Height); //this.Hide(); // if you want to hide 1stform after showing 2nd form 

在form2的表单属性中,将其设置为“父级中心”

如果表单大小相同,那么这将把form2放在form1上,而表单1不可访问。 仍然使用modal(form2.ShowDialog())打开表单,因此即使用户手动移动表单2,焦点也会保留在form2中。

你仍然可以像我刚才提到的那样移动form2,但是这并没有被指定为这个问题的一部分。