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

时间:2011-07-26 22:37:34

标签: c# winforms .net-4.0

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

当我调用表单的CenterToScreen方法时,表单将自己置于光标所在的任何屏幕上。有谁知道为什么?

2 个答案:

答案 0 :(得分:32)

来自documentation

  

请勿直接从您的代码中调用此方法。相反,设置   StartPosition属性为CenterScreen。

     

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

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

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

你可以这样写自己的:

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)
    };   
}

答案 1 :(得分:3)