1

我正在使用winforms。

我创建了一个几乎完成的应用程序。考虑以下情况:我有两个表单,第一个表单在应用程序启动时开始,第二个表单需要在第一个表单旁边打开。

例子:

形式碰撞

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

编辑

以下代码帮助了我:

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

2 回答 2

3

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

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

这意味着您不应该让第二种形式知道第一种形式,而是它的构造函数应该采用:

  1. 一个参数Point location
  2. 两个参数int x, int y

取决于你的喜好。您当然可以(应该)拥有两个构造函数,因此您可以决定是否给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);
于 2013-05-03T11:44:10.173 回答
1

为什么打开新表单时不定位它?

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

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

于 2013-05-03T11:44:21.907 回答