打开第二个表单,右下一个表单

时间:2013-05-03 11:34:55

标签: c# winforms visual-studio location

我正在使用winforms。

我创建了一个几乎完成的应用程序。请考虑以下内容:我有两种形式,第一种形式从应用程序启动开始,第二种形式需要在第一种形式旁边打开。

示例:

Form collision

如何在第二种表单中访问第一个表单的位置?我应该将“this”发送给第二种形式的构造函数吗?

修改

以下代码帮助我:

private void changelogToolStripMenuItem_Click(object sender, EventArgs e)
{
     if (_changelog.IsDisposed)
     {
            _changelog = new Changelog();
     }
            _changelog.Location = new Point((Left + Width), Top);
            _changelog.Show();
}

2 个答案:

答案 0 :(得分:3)

在设计构造函数时要记住的基本规则:永远不要向构造函数提供任何不必要的信息。

所以,你需要的不是另一个窗口,而是它的位置。 更好的是,您需要新窗口所在的位置。

这意味着你不应该让第二个表单知道第一个表单,而是它的构造函数应该采用:

  1. 一个参数Point location
  2. 两个参数int x, int y
  3. 取决于你的偏好。 您当然可以(应该)拥有两个构造函数,因此您可以决定是否提供Point locationint x, int y

    这一切都说,忘了你读的。 比使用构造函数更好,我只需在创建第二个表单时手动设置属性:

    SecondForm form = new SecondForm()
    {
        Location = new Point(this.Right, this.Top)
    };
    

    这只是另一种说法:

    SecondForm form = new SecondForm();
    form.Location = new Point(this.Right, this.Top);
    

答案 1 :(得分:1)

为什么打开时不要放置新表格?

Form2 f = Form2();
f.Location = new Point(this.Left + this.Width, this.Top);
f.Show();  // Or ShowDialog()

当然,这需要将第二个表单属性StartPosition设置为FormStartPosition.Manual