从主窗体(Form1)我打电话来显示另一种形式(Form2)。 但是我想让它显示与form1完全相同的地方和大小,这样我们才能再看到form1,直到我们关闭form2或将其移动到其他地方。 所以我写了这些文字:
Form2 f2 = new Form2();
f2.Left = this.Left;
f2.Top = this.Top;
f2.Size = this.Size;
f2.Show();
但它仍有问题。 form2我们不完全在form1上。我应该在代码中添加任何其他东西吗?
答案 0 :(得分:3)
是的,你这样做是错误的。如果您运行此计算机的机器具有完全相同的用户首选项,系统字体大小和视频DPI设置,则表单的实际大小仅与设计大小相同。如果它很多,那么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;
}
答案 1 :(得分:1)
如果您不希望用户在Form2关闭之前与Form1进行交互,请将最后一行更改为
f2.ShowDialog();
然后用户是否仍然可以看到Form1并不重要。在Form2关闭之前,Windows不会让Form1再次获得焦点。
答案 2 :(得分:1)
使用Form1显示与Form1具有相同大小和相同位置的Form2时会发生什么? Form1将是隐形的吗?那么,为什么你不使用form1.Hide();
?
答案 3 :(得分:1)
试试这个......
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
答案 4 :(得分:0)
在form2的表单属性中,将其设置为“父级居中”
如果表单大小相同,那么这将把form2放在form1上,而表单1则无法访问。仍然使用modal(form2.ShowDialog())打开表单,因此即使用户手动移动表单2,焦点也会保留在form2中。
你仍然可以像我刚才提到的那样移动form2,但这并没有被指定为这个问题的一部分。