C # как убедиться, что выбранный узел остается выделенным, когда фокус потерян - PullRequest
6 голосов
/ 19 января 2009

Я изменил Treeview.HideSelection = false; Но как мне обеспечить, чтобы при потере фокуса выбранный элемент оставался в исходном выбранном цвете?

EDIT:

У меня есть список в форме, которая содержит список событий процесса. Наряду с древовидным представлением в той же форме есть ряд выборов, которые пользователь завершает для классификации события в виде списка. Однако, когда пользователь делает выбор на одном из элементов управления классификацией, выделенный синим цветом выделенный элемент 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 ]

11 голосов
/ 19 января 2009

Установка ListView.HideSelection в значение true означает, что при потере фокуса выбор будет скрыт. Если для HideSelection установлено значение false, выбранный элемент будет по-прежнему иметь цветной индикатор, показывающий, какой элемент выбран.

1 голос
/ 19 января 2009

Как правило, нет. Изменение цвета является одной из визуальных подсказок, которые указывают, какой элемент управления имеет фокус. Не путайте своих клиентов, избавившись от этого.

Если вы хотите нарушить соглашение, то вы можете нарисовать свой элемент управления владельцем, а затем можете рисовать предметы в любой цвет.

Другой вариант, в вашем случае, это использовать выпадающий список вместо списка. Тогда текущий выбор всегда ясен, независимо от того, находится ли элемент управления в фокусе. Или вы можете рассмотреть возможность использования сетки, в которой для каждого события все параметры заданы отдельно, а затем «выбор» не имеет значения.

0 голосов
/ 09 июля 2015

Я использую этот код; это работает для меня.

дизайн: 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
0 голосов
/ 21 октября 2013

Мне нравится HideSelection = false; ответ, потому что:

  1. Это просто

  2. У меня есть функция поиска, которая циклически просматривает узлы и отмечает соответствующие, меняя его фон на желтый, когда пользователь нажимает на узел, текстовое поле заполняется соответствующей информацией, прикрепленной к этому узлу, прежде чем я использовал этот метод, если пользователь нажимает на текстовое поле, чтобы прокрутить его, он не выделяет узел и затрудняет отслеживание того, какой узел был выбран, таким образом, он все еще подсвечивается светло-серым цветом, показывая, что он не в фокусе , в отличие от синего выделения, которое используется, когда оно находится в фокусе. Я мог бы «нарисовать» узел, но с желтым фоном для результатов поиска жизнь была бы более сложной, чем она должна была быть.

  3. Я упоминал, что это было легко?

0 голосов
/ 19 января 2009

Если бы я делал это, у меня просто была бы дополнительная Метка рядом с ListView, над выбранными элементами управления классификацией, которая указала бы, какое событие процесса было выбрано. Вы также можете использовать указанную метку, чтобы добавить дополнительную информацию о событии (если есть).

Таким образом, вы придерживаетесь стандартных соглашений пользовательского интерфейса и , что делает его намного более понятным для пользователя, каков их текущий выбор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...