2010-05-19 7 views
2

듀얼 모니터가 있고 화면 중앙에 Windows 폼을 표시하려고합니다. (변수 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; 

그러나이 코드는 때마다 작동하지 않는 것 ... 그것은 형태를 메인 화면 만에 모든 시간을 표시합니다. 왼쪽 상단 모서리가 스크린의에없는 경우

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

주이 작동하지 않습니다, 그래서 중심에서 최소 거리와 화면을 찾기 위해 더 좋을 수 있습니다

답변

4

이 시도 대신 양식의.

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

내가의 양식을 표시 할 필요가없는 :

편집

당신이 주어진 화면에 표시 할 경우 this.StartPosition = FormStartPosition.Manual;

이 코드를 사용해보십시오 설정해야합니다 실제로 ('if (screen.WorkingArea.Contains (this.Location))') 그러나'screeenID'에 의존하는 동일한 화면 – serhio

+0

이것을 반영하기위한 편집 된 대답 ... –

관련 문제