2014-10-03 2 views
0

질문은 asked here이지만 제공되는 솔루션은 .NET 4.0/Win7/8.1에서 작동하지 않습니다. 대답은 MaximizeBox를 false로 설정하지 않는 것을 중심으로하지만 다음 코드 조각은 작동하지 않습니다 (즉, 양식이 전체 화면을 커버합니다 (Win7 및 ClassicShell 8.1에서 테스트 됨). 여러 화면에서 작동하고 설정하려면 MaximumSize doesn이 필요합니다. 양식이 최대화되지 않은 경우 사용자가 두 개의 모니터에 걸쳐 양식 너비를 허용해야하며 BeforeMaximize 이벤트도 걸리지 않으므로 OnMove 이벤트에서 MaximumSize을 간단히 설정할 수 없습니다.최대화 된 경계없는 양식 작업 표시 줄

public TestForm() 
{ 
    InitializeComponent(); 

    FormBorderStyle = FormBorderStyle.None; 
    WindowState = FormWindowState.Maximized; 
} 

VS2013 작업 표시 줄을 포함하지 않고 그냥 할 수있을 것으로 보인다

편집 :. 설정 MaximizedBounds을 (로 Hans Passant가 응답 함) 보조 화면이 기본보기보다 큰 보조 화면에서는 작동하지 않습니다. (참고 : 다음은 Hans의 답변이 수정 된 버전으로 보조 화면에서는 작동하지 않습니다.)

예 :

protected override void OnLocationChanged(EventArgs e) 
{ 
    var workArea = Screen.FromControl(this).WorkingArea; 
    MaximizedBounds = new Rectangle(0, 0, workArea.Width, workArea.Height); 
    Debug.WriteLine(MaximizedBounds); 

    base.OnLocationChanged(e); 
} 

// Button click event (hit when form maximized): 
WinApi.RECT rect; 
WinApi.GetWindowRect(Handle, out rect); 
Debug.WriteLine(rect); 

출력 :

OnLocationChanged: {X=0,Y=0,Width=1920,Height=1040}

ButtonClick when form is maximized: {Left=1366,Top=-216,Right=3840,Bottom=876}

이 될 밖으로 작동 :

극대화 폭 = 3840-1366 = 2474

극대화 높이 = 876를 + 216 = 1092

프레임 워크에서이 수치를 얻은 곳은 어디입니까? 당신의 국경 창이 작업 표시 줄을 포함하는 경우

+1

는 가장 높은 투표 대답에서, 당신의 위의 코드에 한 번 더 라인을 추가 공장. 'MaximumSize = Screen.FromControl (this) .WorkingArea.Size;' –

+0

'MaximumSize'가 다중 모니터에서 작동하지 않는 이유를 설명하기 위해 질문을 편집했습니다. –

+0

폼의 MaximizedBounds 속성을 할당하십시오. –

답변

0

당신이 그것을 할 수 있습니다

this.FormBorderStyle = FormBorderStyle.Sizable; 
this.WindowState = FormWindowState.Maximized; 
this.MaximumSize = this.Size; 
this.FormBorderStyle = FormBorderStyle.None; 
this.WindowState = FormWindowState.Normal; 

을이이처럼 수행 - '가 외설 을로드시는 테두리 창을 최대화하고, 국경 극대화에 최대 크기를 설정합니다 t는 작업 표시 줄을 가리 킵니다. 그런 다음 테두리를 제거하고 창을 정상 상태로 되돌립니다. 이 스 니펫을로드 섹션에 추가하십시오. 가능한 오류에 대해 죄송 , 나는에서 왔어요 폴란드 :

0

늦게 파티 - 어쨌든 -이 나를 위해 작동합니다

Screen screen = Screen.FromControl(this); 
int x = screen.WorkingArea.X - screen.Bounds.X; 
int y = screen.WorkingArea.Y - screen.Bounds.Y; 
this.MaximizedBounds = new Rectangle(x, y, 
    screen.WorkingArea.Width, screen.WorkingArea.Height); 
this.MaximumSize = screen.WorkingArea.Size; 
this.WindowState = FormWindowState.Maximized;