2009-03-17 7 views
0

패널 안에 많은 레이블과 텍스트 상자가있는 Windows 응용 프로그램에 System.Windows.Forms.Panel 컨트롤이 있습니다. Panel.Enabled = false 명령을 호출하면 모든 텍스트 상자와 레이블이 회색으로 변하고 편집 할 수 없게되어 원하는 효과가 나타납니다. 패널을 사용할 수 없을 때 연한 회색을 과부하하는 방법이 있습니까?System.Windows.Forms.Panel.Enabled = false 색 오버로드?

솔루션 사용 :

사용할 때 사용할 색상 overiden 질수 있기 때문에 다음은 났을 Panel.Enabled = 거짓 ;.보다는 패널에만 텍스트 상자와 라벨을 사용하지 않도록 설정하는 데 사용

//Loop through the Member info Panel and find all the group boxes 
foreach (Control cItem in Panel.Controls) 
{ 
    //A group box is found 
    if (cItem is GroupBox) 
    { 
     //Loop through all the group box components 
     foreach (Control cSubItem in cItem.Controls) 
     { 
      //If its a label of text box disable it 
      if (cSubItem is TextBox || cSubItem is Label) 
      { 
       cSubItem.Enabled = false; 
      } 
     } 
    } 
} 

답변

1

대안으로 :

나는 잠시 뒤로이 효과를 달성하는 방법에 대한 블로그 포스트를 작성 패널에 추가하고 EnabledChanged 이벤트에 사용자 정의 함수를 할당하여 색상을 변경합니다 (유형에 따라 다름). 당신은 아마도 당신이 수정하는 컨트롤의 유형을 필터링하고 싶지만 이것을 사용하여 내가 생각하는 목표를 달성 할 수 있습니다.

업데이트 :이 시도 : 당신의 폼 클래스 내부에 위치해야합니다하지만 당신이 이벤트에 사용할 수 public void deselected(object sender, EventArgs e) { foreach (Control c in this.Controls) { //TODO:check type of control and change background color } } . 희망이 도움이됩니다.

+0

나는 반복 할 논리를 찾고있었습니다. 패널은 솔기가 없어 자식 콜렉션이 없으므로 작동 할 폼 수준에서 반복 할 것이지만 메인 부모 노드가 무엇인지 알아낼 필요가 있습니다. –

3

해제 된 각 Label 및 TextBox의 색상에 대한 덮어 씌우기를 수행 할 방법이 없습니다. 그러나 포함 패널이 비활성화 된 후 각각의 개별 컨트롤을 재정의하고 적절한 색상으로 설정할 수 있습니다.

TextBox 클래스 (특히 TextBoxBase 클래스)는 비활성화되었을 때 그리기의 기본 회색 색상보다 명시적인 색상을 선호합니다. 컨트롤이 당신이 등록 컨트롤을 반복 할 수있는 다른 활성화/비활성화 컬러를 원하는 경우 : http://blogs.msdn.com/jaredpar/archive/2007/02/12/readonly-textbox-that-doesn-t-look-funny.aspx