C# 在第一个表单的位置显示第二个表单

C# 在第一个表单的位置显示第二个表单,c#,winforms,C#,Winforms,从主表格(表格1)我打电话是为了展示另一个表格(表格2)。 但我希望它能显示与form1完全相同的位置和大小,这样我们就不能再看到form1了,除非我们关闭form2或将它移到其他地方。 所以我写了以下几行: Form2 f2 = new Form2(); f2.Left = this.Left; f2.Top = this.Top; f2.Size = this.Size; f2.Show(); 但它仍然存在问题

从主表格(表格1)我打电话是为了展示另一个表格(表格2)。 但我希望它能显示与form1完全相同的位置和大小,这样我们就不能再看到form1了,除非我们关闭form2或将它移到其他地方。 所以我写了以下几行:

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

但它仍然存在问题。form2我们不完全在form1上。还有什么需要添加到代码中的吗?

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

f2.ShowDialog();

那么,用户是否还能看到Form1就无关紧要了。在关闭Form2之前,Windows不会让Form1再次获得焦点。

当使用Form1显示相同大小和位置的Form2时会发生什么?Form1将不可见,对吗?那么,为什么不使用
form1.Hide()

是的,您这样做的方式不对。如果运行表单的计算机具有完全相同的用户首选项、系统字体大小和视频DPI设置,则表单的实际大小仅与设计大小相同。如果经常关闭,则DPI设置不同。如果它关闭了一点,那么用户的偏好是不同的。比如更大的标题栏字体或更大的按钮。修正:

    Form2 f2 = new Form2();
    f2.Show();
    f2.Left = this.Left;
    f2.Top = this.Top;
    f2.Size = this.Size;
如果这太明显,那么您应该让Form2的Load事件来完成。传递对主窗体的引用或使用Owner属性和Show(Owner)。换言之:

    Form2 f2 = new Form2();
    f2.Show(this);
表格2:

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

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的表单属性中,将其设置为“以父对象为中心”

如果表单大小相同,则会将表单2置于表单1之上,并且无法访问表单1。仍然使用modal(form2.ShowDialog())打开表单,因此即使用户手动移动表单2,焦点仍停留在表单2上


您仍然可以移动表单2,就像我刚才在表单1中提到的那样,但这并不是这个问题的一部分。

它是如何显示的?它是不是偏右偏下了一点?窗体上是否也显示了窗口控件?不完全?它是关闭了很多还是减少了几个像素?是的,它在右边和底部关闭了。您是否将Form2的StartPosition属性设置为Form1的StartPosition属性?Form1实际上对我并不重要。。。重要的是,我希望Form2和Form1在同一个地方,大小相同,当然这会导致Form1不可见,是的。。但这不是目标…所以,我可以说,给form1和form2相同的尺寸,然后设置起始位置,如中间:)@Serkan:好的呼叫。。。但不要将它设置为中心。。。实际上,我将Form2的起始位置设置为“手动”,然后它就可以正常工作了。