日期:2014-05-18  浏览次数:20563 次

请教高手一个委托的问题,详情请进。
现有一个公共函数:是在遍历树过程进行一些操作,用到了委托
public   delegate   void   TraverseTreesTaskDelegate(TreeNode   n);
//遍历树,用到上面的委托
public   static   void   TraverseNodes(TreeNodeCollection   NDS,TraverseTreesTaskDelegate   myJob)  
{
for(int   i=0;i <=NDS.Count-1;i++)
{
myJob(NDS[i]);
TraverseNodes(NDS[i].Nodes,myJob);
}
}

我以前写过一个函数:
private   void   TraverseNodes(TreeNodeCollection   NDS,string   strPermissions)  
{
for(int   i=0;i <=NDS.Count-1;i++)
{
string   rID   =   NDS[i].NodeData.Split(new   char[]{ '; '})[0];
if(strPermissions.IndexOf(rID)> =0)
{
NDS[i].Checked   =   true;
}
else
{
NDS[i].Checked   =   false;
}
TraverseNodes(NDS[i].Nodes,strPermissions);
}
}
请问这个函数能不能改成用上面的公共函数?(我的主要障碍就是怎么传那个strPermissions)
如果不能,请高手写个新的公共函数(给出大体样子即可),谢谢!

------解决方案--------------------
没太看明白你的意思
try
delegate.BeginInvoke( yourdelegate , 参数 );
调用

------解决方案--------------------
没看懂,猜测一下,

public delegate TraverseTreesTaskDelegate(TreeNode node, string perms);

public static void TraverseNodes(TreeNodeCollection NDS,TraverseTreesTaskDelegate myJob, string strPermissions)
{
for(int i=0;i <=NDS.Count-1;i++)
{
myJob(NDS[i], strPermissions);
TraverseNodes(NDS[i].Nodes,myJob, strPermissions);
}
}

public static void MyInnerJob(TreeNode node, string perms)
{
// ....

}

TraverseTreesTaskDelegate myDelegate = new TraverseTreesTaskDelegate(MyInnerJob);

TraverseNodes(someTree.Nodes, myDelegate);

------解决方案--------------------
帮顶,