2009-03-13 8 views
8

Lorsque je sélectionne un nœud dans l'arborescence, il met en surbrillance et j'affiche des données basées sur ce nœud ci-dessous. Lorsque je sélectionne un autre contrôle (l'arborescence perd le focus), il n'est plus mis en surbrillance. Comment puis-je le garder en surbrillance après avoir perdu le focus? Tout en faisant une recherche je ne peux pas dire quel noeud est sélectionné car je dois garder le focus sur la zone de texte (de sorte que l'utilisateur peut taper plus de texte).Contrôle TreeView en C#, select() et focus

Répondre

10

Vous devez définir la propriété HideSelection false - de sorte que vous verrez la sélection, barbante l'accent a perdu le contrôle TreeView

+0

je me débattais avec exactement le même problème 3 jours avant ... – bernhardrusch

+2

Je dois ajouter qu'il ya effectivement 3 classes TreeView en C#: WinForms, ASP .NET et WPF. Seul le contrôle WinForms possède la propriété HideSelection. – wigy

+0

Cela me laisse me demander pourquoi le designer Visual Studio assigne 'true' comme valeur par défaut de la propriété' HideSelection'. Je pense que dans la majorité des cas d'utilisation *** pas *** cacher le nœud actuellement sélectionné serait préférable. – DavidRR

3

Je viens de lancer sur cette question et voici comment j'adressai: Changé la propriété DrawMode à TreeViewDrawMode.OwnerDrawText et enregistré à l'événement de 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 la couleur de surbrillance ne suffit pas brillante à votre goût quand HideSelection est réglé sur False et la mise au point perdu TreeView:

Assurez-vous que votre T La propriété HideSelection de reeView est définie sur True (valeur par défaut).

gérer ensuite les années TreeView Entrer et laisser des événements tels que:

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