2009-03-13 12 views
8

Po wybraniu węzła w widoku drzewa podświetla się i wyświetla dane na podstawie tego węzła poniżej. Po wybraniu innej kontrolki (widok drzewa traci ostrość) nie jest już podświetlany. Jak mogę go podświetlić po utracie ostrości? Podczas wyszukiwania nie mogę powiedzieć, który węzeł jest wybrany, ponieważ muszę skupić się na polu tekstowym (aby użytkownik mógł wpisać więcej tekstu).Sterowanie TreeView w C#, zaznaczenie() i skupienie

Odpowiedz

10

Musisz ustawić właściwość HideSelection false - więc widać wybór, altough kontroli TreeView stracił ostrości

+0

Walczyłem z dokładną tego samego problemu 3 dni przed ... – bernhardrusch

+2

Muszę dodać, że nie są w rzeczywistości 3 klasy TreeView w C#: WinForms, ASP .NET i WPF. Tylko formant WinForms ma właściwość HideSelection. – wigy

+0

Zastanawiam się, dlaczego projektant Visual Studio przypisuje "true" jako domyślną wartość właściwości 'HideSelection'. Myślę, że w większości przypadków użycia *** nie byłoby *** ukrywanie wybranego aktualnie węzła. – DavidRR

3

Właśnie napotkasz ten problem i jest to jak ja skierowana go: Zmieniono właściwość trybRysowania do TreeViewDrawMode.OwnerDrawText i zarejestrowany DrawNode imprezy


    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

Jeśli kolor podświetlenia nie jest wystarczająco jasny do własnych upodobań, kiedy HideSelection jest ustawiona na False i TreeView stracił ostrości:

upewnić się, że T Funkcja ukrywania selekcji reeView ma wartość True (wartość domyślna).

Następnie uchwyt TreeView na wejście i wyjście wydarzeń, takich jak:

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