2009-10-21 5 views
3

양식이 mdicontainer이고 맨 위에 메뉴가 있습니다. 내 mdi 컨테이너에 자식 폼을 추가하고 자식을 최대화하면 그것은 menustrip을 극대화합니다. 나는 아이를 극한 상황에서 극대화 할 수있는 방법을 알고 싶다. 어떤 도움을 주시면 감사하겠습니다.제한된 영역에서 하위 mdi 최대화

답변

2

MDI에서 하위 양식이 최대화되는 방식으로 자녀 양식이 최대화되고 있습니다. 그것은 실제로 상위 폼의 메뉴 스트립을 다루는 것이 아닙니다. 실제로 자체 메뉴 스트립과 부모 폼의 메뉴 스트립을 병합합니다.

는 MDI 부모에서만 사용할 수있는 아이의 영역을 차지 (부모의 메뉴와 해당 메뉴를 병합 할) 자식 폼을 하위 폼의 Resize 이벤트에서이 같은 코드를 넣어 :

if (this.WindowState == FormWindowState.Maximized) 
{ 
    this.WindowState = FormWindowState.Normal; 
    this.Size = this.MdiParent.ClientSize; 
    this.Location = new Point(0, 0); 
} 

을 사용하면 하위 창이 실제로 최대화되는 것을 방지 할 수 있습니다.

"이 코드와 비슷한 것"이라고 말하면이 스 니펫이 올바르게 작동하지 않기 때문입니다. 부모 폼의 ClientSize 속성은 폼의 전체 크기를 제공하지만 MDI 클라이언트 영역의 크기 만 사용하려고합니다. 나는 그것을 얻는 법을 모른다. 그리고 명백하게 그것은 매우 쉽지 않다. 그래서 여기에 사람이보고에 대한 답변입니다,

Size/Location of Winforms MDI Client Area

+0

3 년 후 Boy, 3 년 후 나는 이것을 알아 내기 위해 내가 링크 된 대답이 이것을 결정할 수있는 매우 쉬운 방법을 제공 할 때 "나는 쉽지 않다"라는 것이 무엇을 의미하는지 궁금해한다. – MusiGenesis

0

전체 컨테이너를 채우지 않도록 MaximumSize 속성을 설정할 수 있습니다.

+0

상단에 끝까지 넣고 아래쪽에 열린 공간을 남기는 것 외에는 효과가 있습니다. 위치를 조정선 아래로 설정하면 처음에는 작동하지만 이후에는 다시 정상으로 되돌립니다. –

0

나는이 오래된 질문 알아요,하지만 난 그냥 일하고 있어요 오래된 프로젝트에이로 실행 :이 질문을 참조하십시오. Dock을 DockStyle.Fill로 설정하면 원하는 동작을 얻을 수 있습니다.

DockStyle이있는 동안 창 위치를 조정하거나 크기를 조정하려고하면 창이 작동하거나 이상하게 보일뿐입니다.

이 작업을 수행하기 위해 MDI 클라이언트 창의 resize 이벤트를 구독하고 창이 방금 최대화 되었으면 해당 DockStyle을 채우기로 설정하고 FormBorderStlye를 FixedDialog로 설정하여 크기 조정을 방지하고 창 상태를로 설정합니다. 최대화가 발생하지 않도록 정상으로 설정합니다.

이 "최대화 된 상태"에있는 동안 사용자가 창을 이동하지 못하도록하려면 WndProc 메서드를 무시하고 창을 이동할 때 처리 (SC_MOVE)하고 동작을 적용하지 못하도록 반환을 배치했습니다.