【问题标题】:Open form (Winforms) FromStartPosition CenterParent when using more than one monitor使用多个显示器时打开表单(Winforms)FromStartPosition CenterParent
【发布时间】:2017-06-16 08:08:57
【问题描述】:

我想用 FormStartPosition.CenterParent 从另一个表单打开一个表单。 当有多个屏幕并且我通过 Visual Studio 运行程序时,这可以正常工作。但是当我运行 EXE 文件时,它实际上不起作用。

var dialog = new Form();
dialog.StartPosition = FormStartPosition.CenterParent;
dialog.Show(this);

但是当我运行 EXE 文件(不是通过 Visual Studio)并将我的表单拖到另一个屏幕并按下运行上述代码的按钮时,它仍然会在另一个屏幕中打开表单。

我找到了在同一屏幕上打开表单的解决方案,但应该有一种方法可以更轻松地始终在 CenterParent 中打开表单?

这里的代码 sn-p 至少可以使表单始终在同一屏幕上打开:

var dialog = new Form();   
dialog.StartPosition = FormStartPosition.Manual;
var currentScreen = Screen.FromControl(this);
dialog.Location = currentScreen.Bounds.Location;
dialog.Show(this);

有什么想法吗?

/罗伯

【问题讨论】:

  • CenterParent 用于 MDI 子窗体,它不会在其父屏幕上居中窗体。您实际上想做什么,在不同的屏幕上打开每个表单?
  • 啊,这实际上解释了一些事情。不,我试图在放置表单的同一屏幕中打开子表单。我现在将为此提供一个解决方案。谢谢

标签: c# .net winforms


【解决方案1】:

看到这个帖子:https://stackoverflow.com/a/15862043/495455

您需要确定“虚拟屏幕”的大小,包括所有显示器。

int screenLeft = SystemInformation.VirtualScreen.Left; 
int screenTop = SystemInformation.VirtualScreen.Top; 
int screenWidth = SystemInformation.VirtualScreen.Width; 
int screenHeight = SystemInformation.VirtualScreen.Height; 

【讨论】:

  • 这如何让在 CenterParent 中打开表单变得更容易? :)
  • 我想我误会了,你是说你实际上没有问题,你只是在寻找更简单的方法?
  • 我在想你只会做一个this.Left = this.Parent.Width / 2 - this.Width / 2; 但使用 Location 而不是 Left...但这就是 CenterParent 所做的。请确认您的问题 - 我是赞成票
  • 问题是在打开程序时设置 StartPosition = FormStartPosition.CenterParent 在有多个屏幕时实际上不起作用。我只想要一个更简单的解决方案而不是黑客。通过visual studio运行程序时它工作正常,很奇怪。应该只是设置一个属性
  • CenterParent 应该在其父级的中心打开表单。但是当有多个显示器时,这将不起作用
猜你喜欢
  • 2010-12-13
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多