2009-03-13 15 views
8

Cuando selecciono un nodo en la vista de árbol, se resalta y muestro datos basados ​​en ese nodo a continuación. Cuando selecciono otro control (la vista de árbol pierde el foco) ya no está resaltado. ¿Cómo lo mantengo resaltado después de perder el foco? Mientras hago una búsqueda, no puedo decir qué nodo está seleccionado ya que debo mantener el foco en el cuadro de texto (para que el usuario pueda escribir más texto).Control TreeView en C#, seleccione() y enfoque

Respuesta

10

Hay que establecer la propiedad HideSelection en false - por lo que verá la selección, Altough el control TreeView perdido el foco

+0

Luché con el mismo problema 3 días antes ... – bernhardrusch

+2

debo añadir que en realidad hay 3 clases de TreeView en C#: WinForms, ASP .NET y WPF. Solo el control WinForms tiene la propiedad HideSelection. – wigy

+0

Esto me deja preguntándome por qué el diseñador de Visual Studio asigna 'true' como el valor predeterminado de la propiedad' HideSelection'. Creo que en la mayoría de los casos de uso sería preferible ocultar *** no *** el nodo seleccionado actualmente. – DavidRR

3

acabo con este problema y así es como me dirigí a él: Se ha cambiado la propiedad DrawMode a TreeViewDrawMode.OwnerDrawText y registrado a eventos DrawNode


    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

Si el color de resaltado no es lo suficientemente brillante para su gusto cuando HideSelection se establece en False y TreeView enfoque perdido:

Asegúrese de que su camiseta reeView's HideSelection se establece en True (valor predeterminado).

Entonces el mango del TreeView entrar y salir de eventos como:

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; 
} 
Cuestiones relacionadas