2011-03-29 6 views
2

부모 폼의 크기를 기반으로 내 자식 폼의 크기를 쉽게 바꿀 수있는 방법을 찾으려고합니다. 즉, 자식 폼이 부모 폼 (FixedToolWindow)에서 튀어 나오게됩니다.부모 크기 조정시 자식 폼 컨트롤 크기 조정

현재이 작업을 수행하려면 양식 내 자식 클래스에 OnParentResize 이벤트가 있어야합니다. 즉

void OnParentResized(object sender, EventArgs e) 
     { 
      //Resize of the form shall be made only when the form is not minimized 
      if (parent.WindowState != FormWindowState.Minimized) 
      { 
       int iWidth = parent.Size.Width; 
       int iHeight = parent.Size.Height; 

       double dXFactor = (double)iWidth/(double)this.Width; 
       double dYFactor = (double)iHeight/(double)this.Height; 
       this.Scale(new SizeF((float)dXFactor, (float)dYFactor)); 

      } 
     } 

라인이 this.scale (새 SizeF ((플로트) dXFactor (플로트) dYFactor)); 은 내 자식 폼의 모든 컨트롤을 조절합니다.

나는 이것을 사용할 때마다 부모 양식의 크기가 조정될 때마다 내 자식 양식도 마찬가지라고 생각합니다. 분명히 여기에 문제가 생기면 자식 폼 안의 모든 컨트롤이 왼쪽 상단에 고정됩니다.

  1. 처음에 내 자녀 양식의 모든 컨트롤은 정상 크기입니다.

  2. 부모 양식의 크기가 작아 지도록 크기가 조정되면 하위 양식도 동일한 요인으로 축소됩니다.

  3. 이제 상위 폼의 크기를 원래 크기로 늘립니다. 하위 폼에있는 컨트롤의 크기가 이제는 더 높은 비율로 증가합니다. 또한 컨트롤이 제자리에 나타나지 않습니다.

누구나 이러한 상황에 대해 더 나은 방법을 제안 할 수 있습니까?

건배

+0

자녀 컨트롤을 모든 방향으로 동적으로 조정할 수 있습니까? – FreeAsInBeer

+0

아니, 모든 방향 TLBR에 앵커라도. 내 자식 폼의 컨트롤이 정상 크기를 초과하여 커지는 것을 봅니다. –

+0

OnParentResized 이벤트는 어떻게 구독하나요? C#에는 그러한 이벤트가 없습니다. – 0x64

답변

0

난 당신이 윈도우의 폭과 높이 대신 ClientRectangle의 폭과 높이를 사용해야 할 것 같아요. 귀하의 클라이언트 rect는 귀하의 창 사각형보다 작습니다. 이것은 초기 추측입니다. 당신이 원하는 배출이 같은 부모 폼 편집 코드에 다음

없음 참으로, childform 테두리 스타일로 isMdiContainer에서 부모의

2

변경.

foreach (var mdiChild in MdiChildren) 
       mdiChild.Close(); 
    var childobj= new childform {MdiParent = this, Dock = DockStyle.Fill}; 
    childobj.Show(); 

컨트롤을 앵커 속성으로 편집하십시오.

희망 사항은 도움이 될 수 있습니다.

관련 문제