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

Wel*_*.59 16 c# .net-4.0 winforms

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

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

Cod*_*ked 33

文档:

不要直接从您的代码中调用它.而是将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)
    };   
}
Run Code Online (Sandbox Code Playgroud)