2009-03-13 47 views
8

Khi tôi chọn một nút trong treeview nó làm nổi bật và tôi hiển thị dữ liệu dựa trên nút đó bên dưới. Khi tôi chọn một điều khiển khác (treeview mất tiêu điểm) nó sẽ không còn được đánh dấu. Làm thế nào để tôi giữ nó nổi bật sau khi mất tập trung? Trong khi thực hiện tìm kiếm, tôi không thể biết nút nào được chọn vì tôi phải giữ tiêu điểm trên hộp văn bản (để người dùng có thể nhập thêm văn bản).Điều khiển TreeView trong C#, chọn() và lấy nét

Trả lời

10

Bạn phải thiết lập thuộc tính HideSelection false - vì vậy bạn sẽ thấy lựa chọn, Mặc dù các điều khiển TreeView mất tập trung

+0

tôi vật lộn với chính xác cùng một vấn đề 3 ngày trước ... – bernhardrusch

+2

Tôi phải thêm rằng thực sự có 3 lớp TreeView trong C#: WinForms, ASP .NET và WPF. Chỉ điều khiển WinForms mới có thuộc tính HideSelection. – wigy

+0

Điều này khiến tôi tự hỏi tại sao nhà thiết kế Visual Studio gán 'true' làm giá trị mặc định của thuộc tính' HideSelection'. Tôi sẽ nghĩ rằng trong phần lớn các trường hợp sử dụng *** không *** ẩn nút hiện đang được chọn sẽ được ưu tiên. – DavidRR

3

Tôi chỉ cần chạy vào vấn đề này và đây là cách tôi giải quyết nó: Thay đổi sở hữu DrawMode để TreeViewDrawMode.OwnerDrawText và đăng ký DrawNode kiện


    private void MyTreeGridview_DrawNode(object sender, DrawTreeNodeEventArgs e) 
    { 
     if ((e.State == TreeNodeStates.Selected) && (!MyTreeGridview.Focused)) 
     { 
      Font font = e.Node.NodeFont ?? e.Node.TreeView.Font; 
      Color fore = e.Node.ForeColor; 
      if (fore == Color.Empty)fore = e.Node.TreeView.ForeColor;  
      fore = SystemColors.HighlightText; 
      Color highlightColor = SystemColors.Highlight; 
      e.Graphics.FillRectangle(new SolidBrush(highlightColor), e.Bounds); 
      ControlPaint.DrawFocusRectangle(e.Graphics, e.Bounds, fore, highlightColor); 
      TextRenderer.DrawText(e.Graphics, e.Node.Text, font, e.Bounds, fore, highlightColor, TextFormatFlags.GlyphOverhangPadding); 
     } 
     else 
     { 
      e.DrawDefault = true; 
     } 
    } 
0

Nếu màu sắc nổi bật là không đủ sáng theo ý thích của bạn khi HideSelection được thiết lập để False và TreeView mất tập trung:

Hãy chắc chắn rằng T của bạn HideSelection của reeView được đặt thành True (giá trị mặc định).

Sau đó xử lý của TreeView Nhập và Để lại các sự kiện như:

void myTreeView_Leave(object sender, EventArgs e) 
{ 
    if((sender as TreeView).SelectedNode != null) 
     (sender as System.Windows.Forms.TreeView).SelectedNode.BackColor = Color.Red; //your highlight color 
} 

void myTreeView_Enter(object sender, EventArgs e) 
{ 
    if((sender as TreeView).SelectedNode != null) 
     (sender as TreeView).SelectedNode.BackColor = (sender as TreeView).BackColor; 
} 
Các vấn đề liên quan