为什么CenterToScreen方法将窗体置于光标所在的屏幕上,而不是带有焦点应用程序的屏幕?

我使用的是Visual Studio 2010,C#.NET 4,WinForms。 我的电脑有2台显示器。

当我调用表单的CenterToScreen方法时,表单以光标所在的屏幕为中心。 有谁知道为什么?

从文档 :

不要直接从您的代码中调用它。 而是将StartPosition属性设置为CenterScreen。

CenterToScreen方法使用以下优先级列表来确定用于居中表单的屏幕:

  1. 表单的所有者属性。
  2. 表单的HWND所有者。
  3. 当前有鼠标光标的屏幕。

因此,有效地在表单的初始显示期间使用它。 它不打算以后使用。

你可以像这样编写自己的:

 protected void ReallyCenterToScreen() { Screen screen = Screen.FromControl(this); Rectangle workingArea = screen.WorkingArea; this.Location = new Point() { X = Math.Max(workingArea.X, workingArea.X + (workingArea.Width - this.Width) / 2), Y = Math.Max(workingArea.Y, workingArea.Y + (workingArea.Height - this.Height) / 2) }; } 

它的设计: http : //msdn.microsoft.com/en-us/library/system.windows.forms.form.centertoscreen.aspx