2016-11-03 17 views
-1

MDI 형식의 하위 폼이 있습니다. 이 양식을 최대화하지 않으면 여러 메뉴 패널과 컨트롤 아래에있는 MDI 양식에 맞습니다. 테두리, 아이콘 및 컨트롤 상자가 있습니다. 양식이 최대화되면 테두리는 기본 MDI 양식 테두리 바로 아래에 표시됩니다. 최대화되면 컨트롤 박스가 비활성화되고 아무 이유없이 국경이 필요 없습니다. 양식은 프로그래밍 방식으로 크기가 조정되므로 최대화 될 때 테두리/컨트롤이 필요하지 않습니다.C# 양식 테두리를 완전히 숨길 때 최대화

양식을 최대화 할 때만 FormBorderStyle = None을 설정하는 방법이 있습니까? Max가 아닌 다른 크기 일 때 FormBorderStyle = sizeable을 사용할 수 있습니까?

아래의 스크린 샷을 참조하십시오. 빨간색 선이 내가 숨기고 싶은 경계에 있습니다. 툴 스트립 컨트롤로 표시된 영역이 실제로는 폼 위에 있지 않습니다. 공백으로 표시된 그림 상자는 테두리가있는 실제 양식입니다. 최대화되지 않을 경우 테두리는 그림 상자 영역 바로 위 및 도구 상자 영역 아래에 표시되며 사용자가 크기를 조정할 수 있습니다. 최대 때, 사용자는 크기를 조정할 수 없습니다, 그래서 극대화되지 않음 기본 양식 국경

아래의 실수 보이는 그 경계를 숨기려 : 최대화 할 때 https://i.stack.imgur.com/TFDjk.png

: [1] https://i.stack.imgur.com/EK4cY.png

+0

어린이 양식은 최대화시 테두리가 없으므로 모든 클라이언트 영역을 채우며 일반적으로 해당 메뉴를 상위 양식과 공유합니다. 양식의 그림을 최대화 할 수 있습니까? – McNets

+0

https://i.stack.imgur.com/EK4cY.png –

+0

제기 된 경계를 의미합니까? – McNets

답변

0

그것은 자식 폼이므로 부모 폼을 최대화 할 수 없습니다. 추가 정보를 공유하여 도움을받을 수 있습니까? 어쩌면 스크린 샷을 공유 할 수 있습니까?

+0

https://i.stack.imgur.com/EK4cY.png –

+0

빨간 선이 내가 숨기고 싶은 경계에 있습니다. 도구 스트립 컨트롤로 표시된 영역이 실제로는 위에 있지 않고 양식 위에 있습니다. 공백으로 표시된 그림 상자는 테두리가있는 실제 양식입니다. 최대화되지 않을 경우 테두리는 그림 상자 영역 바로 위 및 도구 상자 영역 아래에 표시되며 사용자가 크기를 조정할 수 있습니다. 최대화되면 사용자가 크기를 조정할 수 없으므로 기본 테두리 아래에 테두리가 보이지 않도록 해당 테두리를 숨기려고합니다. –

1

나는 stackoverflow 및 인터넷 검색에서 찾은 다른 게시물에 따라이 코드를 작성했습니다.

테스트를 마쳤습니다.

[DllImport("user32.dll")] 
private static extern int GetWindowLong(IntPtr hWnd, int nIndex); 

[DllImport("user32.dll")] 
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); 

[DllImport("user32.dll", ExactSpelling = true)] 
private static extern int SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); 

const int GWL_EXSTYLE = -20; 
const int WS_EX_CLIENTEDGE = 0x200; 
const uint SWP_NOSIZE = 0x0001; 
const uint SWP_NOMOVE = 0x0002; 
const uint SWP_NOZORDER = 0x0004; 
const uint SWP_NOACTIVATE = 0x0010; 
const uint SWP_FRAMECHANGED = 0x0020; 
const uint SWP_NOOWNERZORDER = 0x0200; 

private void MdiEdgeBorderOnOff(bool off) 
{ 
    foreach(Control ctl in this.Controls) 
    { 
     if (ctl.GetType() != typeof(MdiClient)) continue; 

     int wnd = GetWindowLong(ctl.Handle, GWL_EXSTYLE); 
     if (off) 
      wnd &= ~WS_EX_CLIENTEDGE; 
     else 
      wnd |= WS_EX_CLIENTEDGE; 

     SetWindowLong(ctl.Handle, GWL_EXSTYLE, wnd); 

     SetWindowPos(ctl.Handle, IntPtr.Zero, 0, 0, 0, 0, 
      SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | 
      SWP_NOOWNERZORDER | SWP_FRAMECHANGED); 
    } 
}