C# Winforms位置
我有一个包含2个C# Winforms位置,c#,winforms,C#,Winforms,我有一个包含2个表单、主窗口和第二个表单的应用程序 我想要的是在点击按钮时打开第二个表单,它的位置必须在主表单旁边(因此,如果主表单的宽度为600px,则新表单的X将为main.X+600) 尝试过这个,但似乎没有成功,它仍然在主窗体的顶部打开: private void button1_Click(object sender, EventArgs e) { var form = new SecondForm(); var main = this.Location; fo
表单
、主窗口和第二个表单
的应用程序
我想要的是在点击按钮时打开第二个表单
,它的位置必须在主表单旁边(因此,如果主表单的宽度为600px
,则新表单的X
将为main.X+600
)
尝试过这个,但似乎没有成功,它仍然在主窗体的顶部打开:
private void button1_Click(object sender, EventArgs e)
{
var form = new SecondForm();
var main = this.Location;
form.Location = new Point((main.X + 600), main.Y);
form.Show();
}
Location
属性是否不正确?将表单的StartPosition
设置为FormStartPosition.Manual
。您可以在设计器中或从构造函数中执行此操作:
StartPosition = FormStartPosition.Manual;
位置
是正确的属性,但必须设置
Form.StartPosition = FormStartPosition.Manual;
也是。很明显,您没有指望StartPosition属性。但是,将其更改为手动并不是正确的修复方法,您加载的第二个表单可能会在另一台具有不同视频DPI设置的机器上重新缩放自身。现在很普遍。进而可以更改其位置属性
正确的方法是等待加载事件触发,然后重新缩放,此时窗口还不可见。这是将其移动到正确位置的最佳时间。开始的位置现在不再重要了。像这样:
var frm = new SecondForm();
frm.Load += delegate {
frm.Location = new Point(this.Right, this.Top);
};
frm.Show();
你看过使用DesktopLocation属性吗?我已经编辑了你的标题。请参见“”,其中的共识是“不,他们不应该”。最好使用this.Width
而不是硬编码值(600)。是的,我遗漏了这个。感谢出于某种原因,将新表单的位置设置为(this.Size.Width,this.Location,Y)
不会完全在旧表单的右边缘打开新表单,但仍会在一定程度上覆盖它。偏移X值似乎没有改变it@sd_dracula你需要(this.Location.X+this.Size.Width,this.Location.Y)
来实现你想要的。