var version = "One Forty Six 1.1 V2 (10 kilo / 20 kilo) (2000 - 2005)";
console.log(version.substring(0, version.indexOf('(')-1));
Load the first 2 levels at startup and load 2 levels down when a node is expanded.
Я согласен с Крисом, мне пришлось сделать это по-разному. Загрузите верхние узлы, а затем запишите событие click, убедитесь, что щелчок был на выбранном узле, а затем заполните узел и, наконец, разверните его.
Если требуется иметь плюс, загрузите верхние узлы и бросьте в него фиктивный узел. Убедитесь, что вы захватили событие щелчка или развертывания, очистите узлы, а затем снова заполнили его.
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));
}
}
Вы пытались заключить дополнения вашего узла в BeginUpdate ()
и EndUpdate ()
вызывает? Это отключает любое рисование и, как таковое, позволяет добавлять большое количество узлов в TreeView без значительных задержек.
Мне также было интересно, как заставить + показываться рядом с бездетными узлами, но я никогда не находил хороший способ. Мое решение состояло в том, чтобы обработать событие 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
Возможно, вам повезет больше с TreeViewAdv (на sourceforge).