2009-08-18 2 views
3

3 단계로 채워진 트리 뷰가 있습니다. 각 그룹 수준에 보유하고있는 하위 항목 수를 추가했습니다. 이제 해당 번호를 다른 색 또는 굵게 표시하고 싶습니다.C# 2 색으로 treenode 텍스트를 설정하십시오.

예 :

트리 [3]
| _ 퍼스트 그룹 [2]
    | _ firstChild
    | _ secondChild
| _ secondGroup [1]
    | _ thirdChild

이것은 Windows Forms 응용 프로그램입니다. 나는 그것이 불가능하다고 생각하지만, 나는 확신하고 싶다.

답변

8

TreeView 컨트롤의 DrawMode를 OwnerDrawText로 설정하고 DrawNode 이벤트 처리기 내에서 드로잉을 수행하여이 작업을 수행 할 수 있다고 생각합니다.

예제 DrawNode 구현 (노드 문자열을 공백으로 분할하고 굵은 체의 첫 번째 요소를 그립니다 나머지 문자열은 일반 글꼴을 사용하고 공백이없는 경우 운영 체제가 도면을 대신 처리하도록합니다)

private void TreeView_DrawNode(object sender, DrawTreeNodeEventArgs e) 
{ 
    string regex = @"^.*\s+\[\d+\]$"; 
    if (Regex.IsMatch(e.Node.Text, regex, RegexOptions.Compiled)) 
    { 
     string[] parts = e.Node.Text.Split(' '); 
     if (parts.Length > 1) 
     { 
      string count = parts[parts.Length - 1]; 
      string text = " " + string.Join(" ", parts, 0, parts.Length - 1); 
      Font normalFont = e.Node.TreeView.Font; 

      float textWidth = e.Graphics.MeasureString(text, normalFont).Width; 
      e.Graphics.DrawString(text, 
            normalFont, 
            SystemBrushes.WindowText, 
            e.Bounds); 

      using (Font boldFont = new Font(normalFont, FontStyle.Bold)) 
      { 
       e.Graphics.DrawString(count, 
             boldFont, 
             SystemBrushes.WindowText, 
             e.Bounds.Left + textWidth, 
             e.Bounds.Top); 
      } 
     } 
    } 
    else 
    { 
     e.DrawDefault = true; 
    } 
} 

참고 : 대신 다시 그려진 각 TreeNode를 위해 그것을 폐기의 굵은 글꼴을 보유하고 폼에 변수 또는 속성을 추가 할 수 있습니다.

+0

그것은 내가 아직 알지 못했던 것입니다. 그냥 필요한 것 – Gerbrand

+0

원본 샘플과 같이 텍스트를 렌더링하도록 코드를 업데이트했습니다. –

0

이 기능이 정말로 필요한 경우라면 TreeView 컨트롤을 확장 할 수 있습니다. 내가 볼 수있는 한 그것은 봉인되어 있지 않습니다.

관련 문제