微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

调用Form.Show时设置窗体的位置

我试图通过.Show()调用时设置窗体的位置。 问题是,因为我使用.Show而不是.ShowDialog StartPosition值不起作用。 我不能使用.Showdialog因为我希望程序在显示窗体的同时在后台工作。

当我创build表单时,我将它的位置设置为固定值:

using (ConnectingForm CF = new ConnectingForm()) { CF.Show(); CF.Location = new Point(this.ClientSize.Width / 2,this.ClientSize.Height / 2); }

但是当我运行代码时,每次启动它时,表单都会置于不同的位置。

任何解决scheme (该位置是从来没有设置其他地方我的代码

如何检查是否“所有人”具有完全控制权限的文件在c#

语言栏在c#.NET中改变语言

在禁用wow64redirect之后,“找不到指定的程序”

.NET和本机C ++应用程序之间进行通信的最佳方式

获取计算机上安装的所有驱动程序

获取Windows上下文菜单select的位置?

读取和写入一个文件,而不是一个小块的磁盘一次的缺点?

游标位置函数返回错误的值

如何从进程列表中隐藏.net应用程序

工具来观察应用程序之间的.NET Remoting通信?

StartPosition应该与Form.Show一起正常工作。 尝试:

ConnectingForm CF = new ConnectingForm(); CF.StartPosition = FormStartPosition.CenterParent; CF.Show(this);

如果您想手动放置表单,如您所示,也可以这样做,但仍需要将StartPosition属性设置为Manual :

ConnectingForm CF = new ConnectingForm(); CF.StartPosition = FormStartPosition.Manual; CF.Location = new Point(this.ClientSize.Width / 2,this.ClientSize.Height / 2); CF.Show();

在旁注中,您不应该使用Form.Show using语句。 using将调用表单,这是不希望的,因为表单的生命周期比这个代码块更长。

从其他线程的一些帮助,我找到了一个工作解决方案:

using (ConnectingForm CF = new ConnectingForm()) { CF.StartPosition = FormStartPosition.Manual; CF.Show(this); ...... }

在新窗体的加载事件中:

private void ConnectingForm_Load(object sender,EventArgs e) { this.Location = this.Owner.Location; this.Left += this.Owner.ClientSize.Width / 2 - this.Width / 2; this.Top += this.Owner.ClientSize.Height / 2 - this.Height / 2; }

(我不是专家,所以请纠正我,如果我错了)下面是我如何解释问题和解决方案:从一开始的问题是,第一个窗体(MainForm)启动位置设置为Windows认位置,当你启动表单。 当我然后调用新的窗体(连接窗体)时,它的位置不是相对于父窗口的位置,而是位置(0,0)(屏幕左上角)。 所以我看到的是MainForm的位置在变化,这看起来就像连接形式的位置正在移动。 所以这个问题的解决方案基本上是先将新表单的位置设置到主表单的位置。 之后,我可以将该位置设置为MainForm的中心。

TL; DR新表单的位置与父表单的位置不相关,但是我猜测的固定位置是(0,0)

为了方便起见,我把MainForm的Startup Position改为了固定的。 我还添加一个事件,以确保新表单位置始终是MainForm的中心。

private void Location_Changed(object sender,EventArgs e) { this.Location = this.Owner.Location; this.Left += this.Owner.ClientSize.Width / 2 - this.Width / 2; this.Top += this.Owner.ClientSize.Height / 2 - this.Height / 2; } private void ConnectingForm_Load(object sender,EventArgs e) { this.Owner.LocationChanged += new EventHandler(this.Location_Changed); this.Location = this.Owner.Location; this.Left += this.Owner.ClientSize.Width / 2 - this.Width / 2; this.Top += this.Owner.ClientSize.Height / 2 - this.Height / 2; }

希望这会帮助其他同样的问题!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐