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

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

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

Ответ 1

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

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

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

  • Свойство владельца формы.
  • Владелец HWND формы.
  • Экран, на котором в данный момент есть указатель мыши.

Таким образом, эффективно он использовался при первоначальном показе формы. Он не предназначен для использования позднее.

Вы можете написать свой собственный так:

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