2009-03-13 22 views
8

Ağaç görünümünde bir düğüm seçtiğimde vurgulanır ve aşağıdaki düğümlere göre verileri gösterir. Başka bir kontrol seçtiğimde (ağaç görünümü odağı kaybeder) artık vurgulanmaz. Odağı kaybettikten sonra vurgulananları nasıl koruyabilirim? Bir arama yaparken hangi düğümün seçildiğini söyleyemiyorum çünkü odağı metin kutusunda tutmalıyım (böylece kullanıcı daha fazla metin yazabilir).C# ağacında TreeView kontrolü,() ve netlemeyi seçin

cevap

10

false HideSelection özelliğini ayarlamak zorunda - TreeView denetimi kayıp odak taşıyamazsınız içeriği göreceksiniz böylece

+0

... – bernhardrusch

+2

.NET ve WPF. Sadece WinForms denetimi HideSelection özelliğine sahiptir. – wigy

+0

Bu, Visual Studio tasarımcısının neden "HideSelection" özelliğinin varsayılan değeri olarak "true" atadığını merak ediyor. Kullanım örneklerinin çoğunda *** mevcut durumda seçilmiş olan düğümü gizlemenin *** tercih edileceğini düşünürdüm. – DavidRR

3

Sadece bu sorunu çalıştırmak ve bunu nasıl hitap ettiği şudur: DrawMode özelliği Değişti TreeViewDrawMode.OwnerDrawText ve DrawNode olayı


    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

kayıtlı HideSelection Yanlış ve TreeView kayıp odak ayarlandığında vurgu rengi beğeninize yeterince parlak değilse:

T emin olun reeView'ın HideSelection öğesi True (varsayılan değer) olarak ayarlanmıştır.

Sonra işlemek TreeView en girin ve benzeri olayları bırak: WinForms ASP: C# 3 TreeView sınıfları aslında olduğunu eklemelisiniz 3 gün önce aynı sorunla mücadele

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