111,120
社区成员
发帖
与我相关
我的任务
分享
public partial class Form1 : Form
{
class TreeNodeEx : TreeNode
{
public TreeNodeEx(string text)
: base(text)
{
}
//用来控制节点是否已经打开过
private bool opened = false;
public bool Opened
{
get { return opened; }
set { opened = value; }
}
}
//添加节点的代理
private delegate void AddNodeDelegate(TreeNode root, string childText);
private AddNodeDelegate myAddNode = null;
//修改节点名称的代理
private delegate void AlterTreeNodeText(string text);
private AlterTreeNodeText alterTreeNodeText = null;
//当前选择的节点
TreeNodeEx currentSelectedNode = null;
string oldValue;
public Form1()
{
InitializeComponent();
TreeNodeEx n = new TreeNodeEx("1");
n.
this.treeView1.Nodes.Add(new TreeNodeEx("1"));
this.treeView1.Nodes.Add(new TreeNodeEx("2"));
alterTreeNodeText = new AlterTreeNodeText(this.OnAlterTreeNodeText);
myAddNode = new AddNodeDelegate(this.AddNodes);
}
protected void OnAlterTreeNodeText(string text)
{
if (currentSelectedNode != null)
currentSelectedNode.Text = text;
}
private void AddNodes(TreeNode node, string text)
{
node.Expand();
node.Nodes.Add(new TreeNodeEx(text));
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
TreeNodeEx node = e.Argument as TreeNodeEx;
if (node == null) return;
oldValue = node.Text;
string newValue = string.Concat(oldValue, "(Expanding...)");
BeginInvoke(alterTreeNodeText, new object[] { newValue });
for (int i = 1; i <= 50; i++)
{
IAsyncResult ar = BeginInvoke(myAddNode, new object[] { node, i.ToString() });
// 等待添加完毕
while (!ar.IsCompleted)
{
Thread.Sleep(100);
Application.DoEvents();
ar.AsyncWaitHandle.WaitOne(-1, false);
}
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
BeginInvoke(alterTreeNodeText, new object[] { oldValue });
currentSelectedNode.Opened = true;
}
private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
currentSelectedNode = e.Node as TreeNodeEx;
if (currentSelectedNode.Opened) return;
this.backgroundWorker1.RunWorkerAsync(currentSelectedNode);
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication11
{
public partial class Form1 : Form
{
public class ThreadStartInfo
{
public TreeNode node=null;
public void LoadNode()
{
System.Threading.Thread.Sleep(5000);
string[] str = new string[] { "jinjazz", "csdn" };
this.AddNode(node, str);
}
delegate void dAddNode(TreeNode node, string[] str);
void AddNode(TreeNode node, string[] str)
{
if (this.node.TreeView.FindForm().InvokeRequired)
{
this.node.TreeView.FindForm().Invoke(new dAddNode(AddNode), new object[] { node, str });
}
else
{
node.Nodes.Clear();
foreach (string strNode in str)
{
node.Nodes.Add(strNode);
}
}
}
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.treeView1.Nodes.Add(new TreeNode("root"));
this.treeView1.AfterSelect += new TreeViewEventHandler(treeView1_AfterSelect);
}
void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (e.Node.Tag==null||e.Node.Tag.ToString() == "")
{
ThreadStartInfo s = new ThreadStartInfo();
s.node = e.Node;
s.node.Tag = 1;
new System.Threading.Thread(new System.Threading.ThreadStart(s.LoadNode)).Start();
e.Node.Nodes.Add("正在载入..");
}
}
}
}