c#winform中如何获取treeview中所有项的数目,包括子节点。并且如何获取当前点击项的顺序值(从上往下的顺序,包括子节点)?
希望附上代码
答案已经有了
//所有节点的个数
int
count = treeView1.GetNodeCount(
true
);
//当前节点序号
void
treeView1_NodeMouseClick(
object
sender, TreeNodeMouseClickEventArgs e)
{
int
sum = getIndex(e.Node, 0);
MessageBox.Show(sum.ToString());
}
int
getIndex(TreeNode node,
int
sum)
{
if
(node.PrevNode ==
null
)
{
if
(node.Parent ==
null
)
{
return
sum + 1;
}
else
{
return
getIndex(node.Parent, sum + 1);
}
}
else
{
sum += node.PrevNode.GetNodeCount(
true
) + 1;
return
getIndex(node.PrevNode, sum);
}
}
//所有节点的个数
int
count = treeView1.GetNodeCount(
true
);
//当前节点序号
void
treeView1_NodeMouseClick(
object
sender, TreeNodeMouseClickEventArgs e)
{
int
sum = getIndex(e.Node, 0);
MessageBox.Show(sum.ToString());
}
int
getIndex(TreeNode node,
int
sum)
{
if
(node.PrevNode ==
null
)
{
if
(node.Parent ==
null
)
{
return
sum + 1;
}
else
{
return
getIndex(node.Parent, sum + 1);
}
}
else
{
sum += node.PrevNode.GetNodeCount(
true
) + 1;
return
getIndex(node.PrevNode, sum);
}
}
顺序值是什么意思?
private int count = 0; private void ViewTree(TreeNode node) { Console.WriteLine(node.Text); this.count++; foreach (TreeNode item in node.Nodes) { ViewTree(item); } } main() { foreach (TreeNode item in this.treeView1.Nodes) { this.ViewTree(item); } Console.WriteLine(count); Console.WriteLine(); }
哈哈,不行就自己写个判断,字数达到多少时,给其设置个样式,指定字体大小!
TreeNode 有个Tag属性 你添加节点的时候 你可以在Text属性中设置 显示的值 在tag中保存 顺序值
private int GetItemCount() { int i = 1; var dic = new Dictionary<int, string>(); foreach (TreeNode node in treeView1.Nodes) { Do(node, ref i, dic); } return dic.Count; } private void Do(TreeNode root, ref int index, Dictionary<int, string> dic) { dic.Add(index, root.Text); index++; foreach (TreeNode node in root.Nodes) { Do(node, ref index, dic); } }
Dictionary的key就是顺序。