【问题标题】:C# how do I ensure the selected node remains highlighted when focus lostC#如何确保在焦点丢失时选定的节点保持突出显示
【发布时间】:2009-01-19 00:04:29
【问题描述】:

我已更改 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);
    }
}

【问题讨论】:

  • 您是在谈论对整个应用程序的关注,还是仅针对特定领域?此外,该项目应该保持选中状态,还是应该取消选择自身?
  • 我怀疑您正在尝试解决其他问题,而弄乱选择颜色是您解决问题的想法。我认为这是个坏主意。而是询问您的原始问题。肯定有更好的解决方案。

标签: c# treeview


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 惯例是个伪君子...试试 ListBox 或 DataGridView。即使不在焦点上,两者都保留蓝色高光。
    • 我从这些答案中得到了很好的笑声。 “那样不行。自己做”。就像任何人都会因为选择的突出显示颜色而从头开始进行用户控制
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      设计: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
      

      【讨论】:

        【解决方案5】:

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

        1. 很简单

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-24
          • 2017-04-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-23
          • 1970-01-01
          相关资源
          最近更新 更多