2010-07-22 4 views
0

TreeView에서 특정 TreeNode의 BackColor를 설정하여 응용 프로그램을 사용하는 동안 노드에 흥미로운 점이 있음을 사용자에게 알려줍니다. 그러나 BackColor를 설정하면 변경된 특정 TreeNode의 레이블 영역이 아니라 전체 부모 TreeView 컨트롤이 다시 그리게됩니다. TreeNode에서 BackColor를 설정하기 만하면 Refresh 또는 Update를 호출하지 않습니다. 변경된 TreeNode의 경계를 무효로하는 것이 아니라 TreeView가 전체 영역을 새로 고치는 것입니다. 이로 인해 귀찮은 컨트롤이 빠르게 깜박입니다.TreeNode.BackColor를 변경하면 전체 TreeView 다시 그리기가 발생합니다.

왜 이런 일이 벌어지고 쉽게 멈출 수 있는지 생각해보십시오.

답변

1

발생을 막을 수있는 것처럼 보입니다. 배경색을 변경, 무효화가 노드를 포함하는 트리에 강제 될 때마다

[SRDescription("TreeNodeBackColorDescr"), SRCategory("CatAppearance")] 
public Color BackColor 
{ 
    get 
    { 
     if (this.propBag == null) 
     { 
      return Color.Empty; 
     } 
     return this.propBag.BackColor; 
    } 
    set 
    { 
     Color backColor = this.BackColor; 
     if (value.IsEmpty) 
     { 
      if (this.propBag != null) 
      { 
       this.propBag.BackColor = Color.Empty; 
       this.RemovePropBagIfEmpty(); 
      } 
      if (!backColor.IsEmpty) 
      { 
       this.InvalidateHostTree(); 
      } 
     } 
     else 
     { 
      if (this.propBag == null) 
      { 
       this.propBag = new OwnerDrawPropertyBag(); 
      } 
      this.propBag.BackColor = value; 
      if (!value.Equals(backColor)) 
      { 
       this.InvalidateHostTree(); 
      } 
     } 
    } 
} 

: 나는 TreeNode.BackColor 세터에 대한 코드를 살펴했다. InvalidateHostTree 함수를 살펴보면 새로 고침이 중지되지 않도록 설정할 수있는 플래그가 없습니다.

+0

감사합니다. 그것이 내가 두려워했던 것입니다. 실행 가능한 솔루션은 내 자신의 CustomBackColor 속성을 가진 OwnerDraw일지도 모릅니다. –