Показать WindowsForm в центре экрана (двойной экран) - PullRequest
2 голосов
/ 19 мая 2010

У меня есть два монитора и я хочу отображать форму окна в центре экрана. (У меня есть переменная MonitorId = 0 или 1).

У меня есть:

System.Windows.Forms.Screen[] allScreens=System.Windows.Forms.Screen.AllScreens;
System.Windows.Forms.Screen myScreen = allScreens[0];

int screenId = RegistryManager.ScreenId;
// DualScreen management
if (screenId > 0)
{
    // has 2nd screen
    if (allScreens.Length == 2)
    {
        if (screenId == 1)
            myScreen = allScreens[0];
        else
            myScreen = allScreens[1];
    }
}

this.Location = new System.Drawing.Point(myScreen.Bounds.Left, 0);
this.StartPosition = FormStartPosition.CenterScreen;

Но этот код, похоже, не работает каждый раз ... Он отображает форму каждый раз только на главном экране.

1 Ответ

4 голосов
/ 09 июня 2010

Попробуйте это:

foreach(var screen in Screen.AllScreens)
{
   if (screen.WorkingArea.Contains(this.Location))
   {
      var middle = (screen.WorkingArea.Bottom + screen.WorkingArea.Top) / 2;
      Location = new System.Drawing.Point(Location.X, middle - Height / 2);
      break;
   }
}

Обратите внимание, что это не будет работать, если левый верхний угол не находится ни на одном из экранов, поэтому может быть лучше найти экран с наименьшим расстоянием от центра формы.

Редактировать

Если вы хотите отобразить на заданном экране, вы должны установить this.StartPosition = FormStartPosition.Manual;

Попробуйте использовать этот код:

System.Windows.Forms.Screen[] allScreens = System.Windows.Forms.Screen.AllScreens;
System.Windows.Forms.Screen myScreen = allScreens[0];

int screenId = RegistryManager.ScreenId;
if (screenId > 0)
{
    myScreen = allScreens[screenId - 1];
}

Point centerOfScreen = new Point((myScreen.WorkingArea.Left + myScreen.WorkingArea.Right) / 2,
                                 (myScreen.WorkingArea.Top + myScreen.WorkingArea.Bottom) / 2);
this.Location = new Point(centerOfScreen.X - this.Width / 2, centerOfScreen.Y - this.Height / 2);

this.StartPosition = FormStartPosition.Manual;
...