Задержанная загрузка TreeView в.NET

var version = "One Forty Six 1.1 V2 (10 kilo / 20 kilo) (2000 - 2005)";
console.log(version.substring(0, version.indexOf('(')-1));

8
задан Craig W. 28 April 2009 в 21:43
поделиться

6 ответов

Load the first 2 levels at startup and load 2 levels down when a node is expanded.

4
ответ дан 5 December 2019 в 21:22
поделиться

Я согласен с Крисом, мне пришлось сделать это по-разному. Загрузите верхние узлы, а затем запишите событие click, убедитесь, что щелчок был на выбранном узле, а затем заполните узел и, наконец, разверните его.

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

2
ответ дан 5 December 2019 в 21:22
поделиться

A possible solution is to stay one step ahead of the treeview:

private void Form1_Load(object sender, EventArgs e)
{
    // initialise the tree here
    var nodeSomething = treeView1.Nodes.Add("Something");
    nodeSomething.Nodes.Add("Something below something");

    treeView1.AfterExpand += AfterExpand;
}

private void AfterExpand(object sender, TreeViewEventArgs e)
{
    foreach (TreeNode node in e.Node.Nodes)
    {
        // skip if we have already loaded data for this node
        if (node.Tag != null) 
            continue;
        node.Tag = new object();
        node.Nodes.AddRange(GetDataForThisNode(node));
    }
}
1
ответ дан 5 December 2019 в 21:22
поделиться

Вы пытались заключить дополнения вашего узла в BeginUpdate () и EndUpdate () вызывает? Это отключает любое рисование и, как таковое, позволяет добавлять большое количество узлов в TreeView без значительных задержек.

MSDN: метод TreeView.BeginUpdate

0
ответ дан 5 December 2019 в 21:22
поделиться

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

Private Sub tvwMain_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles tvwMain.MouseDoubleClick
    Dim oNode As TreeNode

    oNode = tvwMain.GetNodeAt(e.X, e.Y)

    If oNode IsNot Nothing Then
        If oNode.Nodes.Count = 0 Then
            'add children here
        End If
    End If
End Sub
0
ответ дан 5 December 2019 в 21:22
поделиться

Возможно, вам повезет больше с TreeViewAdv (на sourceforge).

0
ответ дан 5 December 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: