6

我改变了 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);
    }
}
4

5 回答 5

11

设置ListView.HideSelection为 true 意味着当失去焦点时,它将隐藏选择。通过设置HideSelection为 false,所选项目仍将有颜色指示器显示已选择的项目。

于 2009-01-19T02:46:58.830 回答
1

一般来说,你不会。颜色的变化是指示哪个控件具有焦点的视觉提示之一。不要通过摆脱它来混淆你的客户。

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

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

于 2009-01-19T02:10:36.517 回答
0

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

这样,您就可以坚持标准的 UI 约定让用户更清楚他们当前的选择是什么。

于 2009-01-19T12:35:18.050 回答
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
于 2015-07-09T06:45:09.213 回答
-2

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

  1. 这简单

  2. 我有一个搜索功能,可以循环遍历节点并通过将其背景更改为黄色来标记相关节点,当用户单击节点时,文本框会在我使用此方法之前填充附加到该节点的相关信息,如果用户单击文本框滚动浏览它,它会取消突出显示节点,并且很难跟踪选择了哪个节点,这样它仍然以浅灰色突出显示它没有焦点,与蓝色突出显示相反对焦时使用。我本可以“绘制”节点,但搜索结果的黄色背景会使生活变得比需要的更复杂。

  3. 我有没有提到这很容易?

于 2013-10-21T11:01:01.190 回答