2010-05-19 4 views
2

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

у меня есть:

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; 

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

ответ

4

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

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; 
+0

Мне не нужно, чтобы отобразить форму на тот же самый экран, который фактически расположен ('if (screen.WorkingArea.Contains (this.Location))), но в зависимости от' screeenID' – serhio

+0

Отредактированный ответ, чтобы отразить это ... –

Смежные вопросы