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

时间:2011-01-05 19:05:51

标签: c# winforms

从主窗体(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上。我应该在代码中添加任何其他东西吗?

5 个答案:

答案 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,但这并没有被指定为这个问题的一部分。