C#中的TreeView控件,select()和焦点

时间:2009-03-13 06:55:25

标签: c# treeview

当我在树视图中选择一个节点时,它会突出显示并显示基于下面该节点的数据。当我选择另一个控件(树视图失去焦点)时,它不再突出显示。失去焦点后如何突出显示?在进行搜索时我无法分辨选择哪个节点,因为我必须将焦点放在文本框上(这样用户可以输入更多文本)。

3 个答案:

答案 0 :(得分:10)

你必须将HideSelection属性设置为false - 所以你会看到选择,尽管TreeView控件失去焦点

答案 1 :(得分:3)

我刚遇到这个问题,这就是我解决它的方法:将DrawMode属性更改为TreeViewDrawMode.OwnerDrawText并注册到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;
        }
    }

答案 2 :(得分:0)

如果当HideSelection设置为False并且TreeView失去焦点时,突出显示颜色不够亮到您的喜好:

确保TreeView的HideSelection设置为True(默认值)。

然后处理TreeView的Enter和Leave事件,如:

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