在第一个表单的位置精确显示第二个表单

Boh*_*ohn 4 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();
Run Code Online (Sandbox Code Playgroud)

但它仍然存在问题。form2并不完全基于form1。我还应该在代码中添加其他内容吗?

Han*_*ant 5

是的,您的做法是错误的。仅当运行该表单的计算机具有完全相同的用户首选项、系统字体大小和视频 DPI 设置时,表单的实际尺寸才与设计尺寸相同。如果关闭很多,则 DPI 设置会有所不同。如果稍微偏离,则用户偏好不同。比如更大的标题栏字体或更大的按钮。使固定:

    Form2 f2 = new Form2();
    f2.Show();
    f2.Left = this.Left;
    f2.Top = this.Top;
    f2.Size = this.Size;
Run Code Online (Sandbox Code Playgroud)

如果这太明显,那么您应该让 Form2 的 Load 事件执行此操作。传递对主窗体的引用或使用 Owner 属性和 Show(owner)。换句话说:

    Form2 f2 = new Form2();
    f2.Show(this);
Run Code Online (Sandbox Code Playgroud)

在表格2中:

    protected override void OnLoad(EventArgs e) {
        base.OnLoad(e);
        this.Location = Owner.Location;
        this.Size = Owner.Size;
    }
Run Code Online (Sandbox Code Playgroud)