양식이 mdicontainer이고 맨 위에 메뉴가 있습니다. 내 mdi 컨테이너에 자식 폼을 추가하고 자식을 최대화하면 그것은 menustrip을 극대화합니다. 나는 아이를 극한 상황에서 극대화 할 수있는 방법을 알고 싶다. 어떤 도움을 주시면 감사하겠습니다.제한된 영역에서 하위 mdi 최대화
답변
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 클라이언트 영역의 크기 만 사용하려고합니다. 나는 그것을 얻는 법을 모른다. 그리고 명백하게 그것은 매우 쉽지 않다. 그래서 여기에 사람이보고에 대한 답변입니다,
전체 컨테이너를 채우지 않도록 MaximumSize 속성을 설정할 수 있습니다.
상단에 끝까지 넣고 아래쪽에 열린 공간을 남기는 것 외에는 효과가 있습니다. 위치를 조정선 아래로 설정하면 처음에는 작동하지만 이후에는 다시 정상으로 되돌립니다. –
나는이 오래된 질문 알아요,하지만 난 그냥 일하고 있어요 오래된 프로젝트에이로 실행 :이 질문을 참조하십시오. Dock을 DockStyle.Fill로 설정하면 원하는 동작을 얻을 수 있습니다.
DockStyle이있는 동안 창 위치를 조정하거나 크기를 조정하려고하면 창이 작동하거나 이상하게 보일뿐입니다.
이 작업을 수행하기 위해 MDI 클라이언트 창의 resize 이벤트를 구독하고 창이 방금 최대화 되었으면 해당 DockStyle을 채우기로 설정하고 FormBorderStlye를 FixedDialog로 설정하여 크기 조정을 방지하고 창 상태를로 설정합니다. 최대화가 발생하지 않도록 정상으로 설정합니다.
이 "최대화 된 상태"에있는 동안 사용자가 창을 이동하지 못하도록하려면 WndProc 메서드를 무시하고 창을 이동할 때 처리 (SC_MOVE)하고 동작을 적용하지 못하도록 반환을 배치했습니다.
3 년 후 Boy, 3 년 후 나는 이것을 알아 내기 위해 내가 링크 된 대답이 이것을 결정할 수있는 매우 쉬운 방법을 제공 할 때 "나는 쉽지 않다"라는 것이 무엇을 의미하는지 궁금해한다. – MusiGenesis