我想在 C# 中将两个窗体彼此相邻放置

问题描述 投票:0回答:5

我有一个表格可以打开另一个表格。

我想要做的是将新打开的表单放置在已经可见的表单旁边(右侧)。

所以我需要将新表单定位到当前表单结束的位置(如果错误请纠正我)。

所以我需要做类似的事情:

newform.Left = this.endposition.right;

endposition 属性是我刚刚编造的(伪代码)。

如何获取当前表单右侧的结束位置?

编辑

我尝试了多种解决方案,但到目前为止都没有奏效。

我总是得到相同的结果:

Why does this happen

我尝试过以下代码:

newform.Left = this.Right + SystemInformation.BorderSize.Width;

newform.Left = this.Right + (SystemInformation.BorderSize.Width * 2);

newform.SetDesktopLocation(this.Location.X + this.Size.Width, this.Location.Y);

Eclyps19 建议手动添加一些像素来定位新表单,尽管我不确定每个系统上的边框是否相同。

c# winforms positioning
5个回答
10
投票

这对我有用:

        Form1 nForm = new Form1();
        nForm.Show();
        nForm.SetDesktopLocation(this.Location.X + this.Size.Width, this.Location.Y);

3
投票

尝试

newform.Left = oldform.Right + SystemInformation.BorderSize.Width;

这应该将边框的宽度(以像素为单位)添加到 oldform.Right 值中。您可以将 SystemInformation.BorderSize.Width 替换为(或添加)为您喜欢的任何整数。


1
投票

我知道这个问题已经很老了,但是对于任何来这里寻找答案的人来说,您需要考虑两种表单边框的大小。边框大小会根据

FormBorderStyle
的不同而不同。

var newForm = new Form2();
newForm.Show();
var form1Border = (this.Width - this.ClientSize.Width) / 2;
var newFormBorder = (newForm.Width - newForm.ClientSize.Width) / 2;
newForm.Left = this.Left + this.Width - form1Border - newFormBorder;

0
投票

您的代码工作正常,但您只需将其放在 newForm.Show() 方法之后即可。


0
投票

@格雷格-安多拉

感谢您的回答,非常有用 ,但是Form本身有一个小注意事项

1-开发商必须更改以下财产 表格(起始位置:手动)

或者它会从标准位置开始

2-假设有一个表单调用两个表单 所以我们制作了各种形式的对象 然后调用一个Control中的每一个(以按钮为例)

重要提示:- 有一些事情需要处理,新位置将大约 15 英寸(在每个最后的表格和新表格之间) 所以我们必须从新表格中减少它们

所以调用表单的代码是

Form2 form2 = new Form2();
Form3 form3 = new Form3();

private void Btn_CallForm2_Click(object sender, EventArgs e)
{
    form2.StartPosition = FormStartPosition.Manual;
    form2.Location = new Point(this.Location.X+form2.Width-15, this.Location.Y);
    form2.Show();
}

private void Btn_CallForm3_Click(object sender, EventArgs e)
{
    form3.StartPosition = FormStartPosition.Manual;
    form3.Location = new Point((this.Location.X + form2.Width +form3.Width)- 30, this.Location.Y);
    form3.Show();
}
enter code here

============== 请注意,对于调用 Form2,我们将其减少为 15 对于调用 Form3,我们将其减少为 30

======

© www.soinside.com 2019 - 2024. All rights reserved.