C# 2.0 WinForm有一个窗口frmMain
frmMain里有一个按钮btnRun和一个函数private void doRenew(int pnum){}
项目中有一个类clsA按钮的处理
btnRun_Click(object sender, EventArgs e)
{
   clsA ps = new clsA();
   ps.doOK();
}我想在ps.doOK()处理中执行frmMain里的doRenew(int pnum)函数
用委托怎么实现这个功能?

解决方案 »

  1.   

    其实不用委托也行,把doRenew设置为public,然后把doOK函数加个参数,把frmMain传进去在doOK里面调用就行了。非要用委托的话,定义委托
    public delegate void doRenewDelegate(int pnum);然后就得修改doOK函数,修改为
    doOK(doRenewDelegate doRenew)
    {
    doRenew(num);
    }调用
    btnRun_Click(object sender, EventArgs e) 

      clsA ps = new clsA(); 
      ps.doOK(doRenew); 
      

  2.   

    btnRun_Click(object sender, EventArgs e) 

      clsA ps = new clsA(this); 
      ps.doOK(); 
    } public class clsA 
    {
    frmMain  f1=null;
      public clsA(frmMain f)
      {
      f1=f;
      }
     public void doOK()
     {
      f1.doRenew(10);
     }
    }
      

  3.   

    doRenew(int pnum)要分开 clsA中定义变量int pnum;
    声明委托  clsA ps = new clsA(); 
    ps.pnum=1;
    ps.click+=new eventhandler(doRenew);
      ps.doOK(); 
      

  4.   

    我以为用委托会比把form作为参数传递过去处理起来要巧妙。看来委托并非万能。