TreeView вертикальная полоса прокрутки не расширяется до последнего узла, последний узел скрыт? - PullRequest
3 голосов
/ 02 декабря 2011

Я наблюдаю странное поведение элемента управления TreeView.

enter image description here

Как вы можете видеть, последний узел в древовидной структуре каким-то образом скрыт (хотя я могу выбрать его с помощью клавиш со стрелками вверх / вниз), и полоса прокрутки не расширяется до него. На рисунке синяя линия, которую вы видите, - это выбранный узел, который скрыт, но, к счастью, все еще видна небольшая подсветка!

Даже когда я нажимаю клавиши pagedown или END, я не могу выбрать последний узел!

Я пытался изменить высоту элемента управления treeview, чтобы он соответствовал высоте узлов, но все равно безуспешно! Мое дерево внутри "панели". это может быть проблемой?

UPDATE Я не делаю что-то необычное. Я просто заполняю цикл над списком <> (с помощью приостановки и возобновления до и после цикла), тогда древовидная структура будет заполняться нормально.

public class MyNode
{
public string Name {get;set;}
public string Result {get;set;} 
}
//suspending code here (dont have access to paste it here)
    foreach(MyNode node in myNodeList)
    {
    TreeNode tn = new TreeNode();
    tn.Text = node.Name;
    tn.Name = node.Result;
    treeView.Nodes.Add(tn);
    }
////unsuspending code here (dont have access to paste it here)

Позже я разрешаю пользователю нажать кнопку, чтобы выделить узлы, для которых в результате был установлен «сбой»:

foreach(TreeNode node in treeView.Nodes)
{
if (node.Name.ToString() == "fail") node.BackColor = Color.Red;
}

После этого последний узел в дереве будет скрыт !!!

FIX Я использовал методы BeginUpdate () и EndUpdate (), и проблема исчезла !!!

Ответы [ 2 ]

5 голосов
/ 02 декабря 2011

Вы должны использовать SuspendLayout () и ResumeLayout () до и после добавления узлов.Это решит проблему.

Вы также можете использовать BeginUpdate () до SuspendLayout () и EndUpdate () после ResumeLayout ().

Редактировать: это известная проблема в .Net2,0.Отключение визуальных стилей поможет.Если вы не хотите отключать визуальные стили, вы можете добавить пустой конец в конец дерева (когда их больше, чем вписывается в видимый элемент управления treeview).Смотрите проблему на MS: https://connect.microsoft.com/VisualStudio/feedback/details/94021/treeview-does-not-display-the-last-node

3 голосов
/ 04 декабря 2011

Я обнаружил, что должен использовать методы treeView.BeginUpdate() и treeView.EndUpdate() до и после заполнения древовидного представления, а также вносить любые изменения в его узлы.

...