我正在使用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();
}
答案 0 :(得分:3)
在设计构造函数时要记住的基本规则:永远不要向构造函数提供任何不必要的信息。
所以,你需要的不是另一个窗口,而是它的位置。 更好的是,您需要新窗口所在的位置。
这意味着你不应该让第二个表单知道第一个表单,而是它的构造函数应该采用:
Point location
int x, int y
取决于你的偏好。
您当然可以(应该)拥有两个构造函数,因此您可以决定是否提供Point location
或int 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