C#如何在焦点丢失时确保所选节点保持突出显示

时间:2009-01-19 00:04:30

标签: c# treeview

我更改了Treeview.HideSelection = false; 但是,如何确保当焦点丢失时所选项目保持原始选定颜色?

编辑:

我在表单上有一个列表视图,其中包含一系列流程事件。在同一表单上的Treeview旁边是一系列选项,用户完成这些选择以在列表视图中对事件进行分类。但是,当用户在其中一个分类控件上进行选择时,蓝色突出显示的选定Treeview项目将变为灰色。我希望找到定义这种颜色的属性,使其颜色为蓝色。

任何建议。

更新

 public partial class myTreeView : TreeView
{
    TreeNode tn = null;
    public myTreeView()
    {
        InitializeComponent();
    }

    protected override void OnAfterSelect(TreeViewEventArgs e)
    {
        if (tn != null)
        {
            tn.BackColor = this.BackColor;
            tn.ForeColor = this.ForeColor;
        }
        tn = e.Node;
        base.OnAfterSelect(e);
    }
    protected override void OnBeforeSelect(TreeViewCancelEventArgs e)
    {

        e.Node.BackColor = Color.Green;
        e.Node.ForeColor = Color.White;
        base.OnBeforeSelect(e);
    }
    protected override void OnGotFocus(System.EventArgs e)
    {

        base.OnGotFocus(e);
    }

    protected override void OnLostFocus(System.EventArgs e)
    {

        if (tn != null)
        {
            tn.BackColor = Color.Green;
            tn.ForeColor = Color.White;
        }
        // tn.BackColor = Color.Red;

        base.OnLostFocus(e);
    }
}

5 个答案:

答案 0 :(得分:11)

ListView.HideSelection设置为true意味着当焦点丢失时,它将隐藏选择。通过将HideSelection设置为false,所选项目仍会显示颜色指示符,以显示选择了哪个项目。

答案 1 :(得分:1)

一般情况下,你没有。颜色的变化是指示哪个控件具有焦点的视觉提示之一。不要因为摆脱它而混淆客户。

如果你想破坏惯例,那么你可以让你的控件所有者绘制,然后你可以绘制你想要的任何颜色的项目。

在您的情况下,另一个选项是使用下拉组合框而不是列表框。然后,无论控件是否具有焦点,当前选择总是清晰的。或者,您可以考虑使用网格,其中每个事件都具有单独给出的所有设置,然后“选择”根本不重要。

答案 2 :(得分:0)

如果我这样做,我会在ListView旁边添加一个额外的标签,在选择的分类控件之上,这将指示选择了哪个过程事件。您还可以使用所述标签添加有关该事件的额外详细信息(如果有)。

通过这种方式,您坚持使用标准的UI惯例,使用户可以更清楚地了解当前的选择。

答案 3 :(得分:0)

我使用这段代码;它对我有用。

设计:Mytreeview.HideSelection = True您将手动突出显示失去焦点的选定节点。

Private Sub MyTreeview_Leave(sender As Object, e As EventArgs) Handles MyTreeview.Leave
    MyTreeview.SelectedNode.BackColor = Color.LemonChiffon
End Sub

Private Sub MyTreeview_BeforeSelect(sender As Object, e As TreeViewCancelEventArgs) Handles MyTreeview.BeforeSelect
    If MyTreeview.SelectedNode IsNot Nothing Then 
        MyTreeview.SelectedNode.BackColor = Color.White
End Sub

答案 4 :(得分:-2)

我喜欢HideSelection = false;回答,因为:

  1. 很容易

  2. 我有一个搜索功能,循环遍历节点并通过将其背景更改为黄色标记相关的功能,当用户点击节点时,文本框中填充了附加到该节点的相关信息,然后我使用这种方法,如果用户单击文本框滚动它,它将不会突出显示节点并使得难以跟踪选择的节点,这样它仍然以浅灰色突出显示它不在焦点,与焦点时使用的蓝色高光相对。我可以“画”节点,但搜索结果的黄色背景会使生活变得更加复杂。

  3. 我提到这很容易吗?