Почему метод CenterToScreen центрирует форму на экране, где находится курсор, а не на экране с сфокусированным приложением? - PullRequest
15 голосов
/ 27 июля 2011

Я использую Visual Studio 2010, C # .NET 4, WinForms. Мой компьютер имеет 2 монитора.

Когда я вызываю метод CenterToScreen формы, форма центрируется на том экране, на котором находится курсор. Кто-нибудь знает почему?

Ответы [ 2 ]

32 голосов
/ 27 июля 2011

Из документации :

Не вызывайте это напрямую из своего кода.Вместо этого установите для свойства StartPosition значение CenterScreen.

Метод CenterToScreen использует следующий список приоритетов для определения экрана, используемого для центрирования формы:

  1. Свойство Owner формы.
  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)
    };   
}
3 голосов
/ 27 июля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...