2012-12-21 2 views
0

레이아웃 컨트롤이 왼쪽, 가운데 및 오른쪽의 세 부분으로 나뉘어져있는 폼이 있습니다. 기본적으로 올바른 레이아웃 컨트롤 항목 (두 개의 격자가 있음)은 숨겨져 있습니다. 두 개의 격자를 보여주기 위해 폼을 오른쪽으로 확장하는 버튼이 폼에 있습니다. 버튼을 다시 클릭하면 오른쪽 레이아웃 컨트롤 항목이 숨겨지고 양식의 크기가 다시 변경됩니다. 기본 기능은 정상적으로 작동하지만 사용자가 단추를 누를 때 MinimumSize를 업데이트하고 싶습니다. 따라서 폼이 확장되어있는 동안 최소 너비를 늘려야합니다. 이것은 내 현재 코드 :양식의 MinimumSize가 올바르게 업데이트되지 않습니다.

private void btnExpand_Click(object sender, EventArgs e) 
    { 
     this.SuspendLayout(); 
     switch (lciRight.Visibility) 
     { 
      case LayoutVisibility.Never: 
       LoadGrids(); 
       lciRight.Visibility = LayoutVisibility.Always; 
       this.Width += lciRight.Width; 
       this.MinimumSize = new Size(this.Width, this.MinimumSize.Height); 
       btnExpand.Text = "<<"; 
       break; 
      case LayoutVisibility.Always: 
       lciRight.Visibility = LayoutVisibility.Never; 
       this.MinimumSize = new Size(689, this.MinimumSize.Height); 
       this.Width -= lciRight.Width; 
       btnExpand.Text = ">>"; 
       break; 
      default: 
       break; 
     } 
     this.ResumeLayout(); 
    } 

난 데 문제는 양식이 이미 확대 될 때 우리가, 다시 원래 크기 확인하기 위해 버튼에

이쪽을 클릭 해 있다는 점이다. MinimumSize = 새 크기 (689, this.MinimumSize.Height);

라인이 MinimumSize를 올바르게 업데이트하지 않습니다. 왜 그런가?

+0

what's 정확히 잘못 다른 곳 (1100 세트 폭)을 오버라이드 (override) 변경 hasn't 경우? – Nogard

+0

아무 것도하지 않는 것뿐입니다. 이 시점에서 this.MinimumSize.Width는 1100이고 해당 행을 실행 한 후에도 양식의 원래 너비 인 689로 변경되는 대신 1100으로 유지됩니다. – Antrim

+1

이것은 SuspendLayout() 때문에 정상입니다. 'this.ResumeLayout();'이 변수가 변경되지 않으면이 속성을 다른 곳에서 재정의했을 수 있습니다. – Nogard

답변

2

이것은 매우 간단합니다.

당신이 다음 줄이 실행 된 후이 속성을 변경 확인 (및 레이아웃에 대한 기타 관련)해야한다고 생각하십시오 :

this.ResumeLayout(); 

이유는 - SuspendLayout()이의 성능을 향상하기 위해 레이아웃을 제어하는 ​​모든 변경 사항을 일시 중단 너의 어플리케이션.

속성은 여전히 ​​가장 아마도 라인

관련 문제