-
c#中的winform的TreeeView节点正在展开
比较简单的做法,增加一个子节点提示.然后开线程请求真实的子节点,完毕后替换提示节点。
代码如下
view plaincopy to clipboardprint?
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
namespaceWindowsApplication11
{
publicpartialclassForm1:Form
{
//用于控制线程的方法
publicclassThreadStartInfo
{
publicTreeNodenode=null;
//模拟载入数据
public voidLoadNode()
{
System.Threading.Thread.Sleep(5000);
string[]str=newstring[]{"jinjazz","csdn","sina","google","yahoo","nba","fifa"};
this.AddNode(node,str);
}
delegatevoiddAddNode(TreeNodenode,string[]str);
//添加节点
voidAddNode(TreeNodenode,string[]str)
{
if(this.node.TreeView.FindForm().InvokeRequired)
{
this.node.TreeView.FindForm().Invoke(newdAddNode(AddNode),newobject[]{node,str});
}
else
{
node.Nodes.Clear();
foreach(stringstrNodeinstr)
{
node.Nodes.Add(strNode);
}
}
}
}
publicForm1()
{
InitializeComponent();
}
privatevoidForm1_Load(objectsender,EventArgse)
{
//添加根节点
this.treeView1.Nodes.Add(newTreeNode("root"));
this.treeView1.AfterSelect+=newTreeViewEventHandler(treeView1_AfterSelect);
}
voidtreeView1_AfterSelect(objectsender,TreeViewEventArgse)
{
if(e.Node.Tag==null||e.Node.Tag.ToString()=="")
{
ThreadStartInfos=newThreadStartInfo();
s.node=e.Node;
//已经载入过的就不要载入了。
s.node.Tag=1;
newSystem.Threading.Thread(newSystem.Threading.ThreadStart(s.LoadNode)).Start();
e.Node.Nodes.Add("正在载入..");
}
}
}
}