C # Остановить Treeview, выбрав один или несколько TreeNodes - PullRequest
1 голос
/ 18 декабря 2008

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

TreeView, который я использую, является версией WinForms элемента управления.

Ниже приведен исходный код, который я сейчас пытаюсь использовать:

private void tree_BeforeSelect ( object sender, TreeViewCancelEventArgs e )
{
    if ( e.Node.Level == 0 )
    {
        e.Cancel = true;
    }
}

Это отменяет выбор узла, но только после нежелательной вспышки (~ 200 мс), что нежелательно.

Ответы [ 3 ]

9 голосов
/ 05 октября 2010

Этот код предотвращает отрисовку выделения до его отмены:

private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
    treeView1.BeginUpdate();
}

private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
    treeView1.EndUpdate();
}
2 голосов
/ 10 июня 2009

В дополнение к существующему коду, если вы добавите обработчик к событию MouseDown в TreeView с кодом и выберете узел, используя его местоположение, вы можете затем установить цвета узлов.

private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
    TreeNode tn = treeView1.GetNodeAt(e.Location);
    tn.BackColor = System.Drawing.Color.White;
    tn.ForeColor = System.Drawing.Color.Black;
}

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

НТН

ONESHOT

2 голосов
/ 18 декабря 2008

Если выбор отменяется установкой Cancel в значение true в аргументах события BeforeSelect, узел не будет выбран, и поэтому цвет фона не изменится.

...