namespace WindowsApplication1
{
public partial class Form1 : Form
{
private List<TreeNode> nodeList = new List<TreeNode>();
private void FetchNode(TreeNode node)
{
nodeListAdd(node);
for (int i = 0; i < nodeNodesCount; i++)
{
FetchNode(nodeNodes[i]);
}
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < thistreeView1NodesCount; i++)
{
FetchNode(thistreeView1Nodes[i]);//递归根节点的所有子节点
}
MessageBoxShow(nodeListCount + "");
}
}
}
如果你说的父节点是根结点,判断:
TreeNode node=treeView1SelectedNode;
if(nodeParent==null)
nodeExpand();
else
ToDo:响应
其实一般不会这样做。因为节点很多情况下是超出两级的。你可以利用nodeTag属性。
比如在加载的时候,把结点分类别,保存到nodeTag属性中。点击节点时,判断该属性值就可以了,当然还用其它方法,比如利用节点的Name属性。象这样:
TreeNode node=treeView1SelectedNode;
if(nodeTagToString()==“父结点”)
nodeExpand();
else
ToDo:响应
treeviewNodesClear();
string fileName = "xxxxml";
try
{
//读取XML文件
TreeNode node;
XmlReader reader = XmlReaderCreate(fileName);
while (readerRead())
{
if (readerNodeType == XmlNodeTypeElement)//元素节点
{
node = new TreeNode();
switch (readerDepth) //元素深度
{
case 0:
nodeText = readerGetAttribute("name");
treeviewNodesAdd(node);
break;
case 1:
nodeText = readerGetAttribute("name");
treeviewNodes[0]NodesAdd(node);
break;
case 2:
nodeText = readerGetAttribute("name");
treeviewNodes[0]Nodes[treeviewNodes[0]NodesCount - 1]NodesAdd(node);
break;
default: break;
}
}
}
readerClose();
treeviewExpandAll();
}
catch (Exception ex)
{
MessageBoxShow(exMessage,"错误提示");
}
一个读取xml文件的范例 你需要根据你的xml文件内容来写
1、SendMessage
向TreeView控件发送消息通常要用API的sendmessge函数,这需要在标准模块里添加声明如下:
'API声明
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd AsLong, ByVal wMsg AsLong, ByVal wParam AsLong, lParam As Any) AsLong
Public Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd AsLong, ByVal wMsg AsLong, ByVal wParam AsLong, ByVal lParam AsLong) AsLong
这上面两个声明,区别只在最后一个参数。Tiger_Zhao说,前一种是自动取地址,通常对应指针类型的参数。后一种直接传值,通常对应非指针类型的参数。通常,如果MSDN 的参数类型有,就用前一种。而后一种,实际上可以对应于下面这种调用: Call SendMessage(hTvw, TVM_EXPAND, TVE_EXPAND, ByVal hItem)。在这篇文章里有一个具体的例子。
2、获得TreeView Node对应的HItem
发消息时,常常需要提供的参数之一是TreeView Node对应的HItem。可以像下面这样获得:
PrivateFunction GetHTreeItem(ByVal nodX As MSComctlLibNode, treX As MSComctlLibTreeView) AsLong
nodXSelected =True
GetHTreeItem = SendMessage(treXhwnd, TVM_GETNEXTITEM, TVGN_CARET, 0)
End Function
不过,上面的方法中要改变treeview的当前节点。如果不希望改变当前节点的话,可以参考这篇文章里的办法:>
string[] strs = { "01", "02", "03", "0301", "0302", "04", "0401", "0402", "05", "0501", "0502" };
foreach (string str in strs) {
if (strLength == 2) {
thistreeView1NodesAdd(str, str); // key, text
}
else {
string parent = strSubstring(0, 2);
TreeNode parentNode = thistreeView1NodesFind(parent, true)[0];
parentNodeNodesAdd(str);
}
}
注意: 这种写法, 要保证添加"0301"之前已经添加好"03"节点, 你只要在添加之前对数据源排序一下就行, 或者就是在添加子节点前判断并处理一下
以上就是关于C#中 TreeView如何获取某一节点下的所有子节点全部的内容,包括:C#中 TreeView如何获取某一节点下的所有子节点、c# Treeview,如何判断双击选中的是父节点、帮我用c#写个 xml读取程序,实现将xml中的树形结构在 winform中以treeView形式显示出来等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)