Quando seleziono un nodo nella vista ad albero evidenzia e mostro i dati basati su quel nodo sottostante. Quando seleziono un altro controllo (il treeview perde lo stato attivo) non viene più evidenziato. Come faccio a tenerlo in evidenza dopo aver perso l'attenzione? Mentre faccio una ricerca non posso dire quale nodo è selezionato poiché devo mantenere l'attenzione sulla casella di testo (in modo che l'utente possa digitare più testo).Controllo TreeView in C#, select() e focus
8
A
risposta
10
È necessario impostare la proprietà HideSelection false - così vedrete la selezione, benche il controllo TreeView perso attenzione
3
Ho appena eseguito in questo problema e questo è come ho affrontato è: Modificata la proprietà DrawMode a TreeViewDrawMode.OwnerDrawText
e registrato all'evento 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
Se il colore di evidenziazione non è abbastanza luminosa a proprio piacimento quando HideSelection è impostata su false e TreeView perso attenzione:
Assicurati che il tuo T HideSelection di reeView è impostato su True (valore predefinito).
Poi gestire del controllo TreeView entrare e uscire eventi come:
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;
}
ho lottato con esattamente lo stesso problema 3 giorni prima ... – bernhardrusch
devo aggiungere che ci sono in realtà 3 classi TreeView in C#: WinForms, ASP .NET e WPF. Solo il controllo WinForms ha la proprietà HideSelection. – wigy
Questo mi fa chiedere perché il designer di Visual Studio assegna 'true' come valore predefinito della proprietà' HideSelection'. Penserei che nella maggior parte dei casi d'uso sarebbe preferibile non nascondere il nodo attualmente selezionato. – DavidRR