我有两个窗体A和B,在A上点击一个按钮弹出B,在窗体B上点击一个按钮,用来调用A的一个方法,那么我是把这个方法用委托的方式传递给B,还是把窗体A传递给B,在B上点击按钮的时候调用a.方法?传递A中方法的委托和传递A对象哪种方法好?为什么?

解决方案 »

  1.   

    你说的是window程序吧
    两种方法都可以.
    但是用静态委托有个缺点,就是当你打开两个A窗口的时候.启动委托的时候,两个窗口中的事件都是执行的
      

  2.   

    不用传递委托。
    这类调用,有如下几种方法,仅供楼主参考:CON-如何在子窗体(被调用者)中实现对其父窗体(调用者)的刷新呢?网络上有几种方法,先总结如下:
    调用窗体(父):Form1,被调用窗体(子):Form2
    方法1: 所有权法
    //Form1:
    //需要有一个公共的刷新方法
    public void Refresh_Method()
    {
    //...
    }
    //在调用Form2时,要把Form2的所有者设为Form1
    Form2 f2 = new Form2() ;
    f2.Owner = this;
    f2.ShowDialog() ;
    //Form2:
    //在需要对其调用者(父)刷新时
    Form1 f1 ;
    f1 = (Form1)this.Owner;
    f1.Refresh_Method() ;
    方法2:自身传递法
    //Form1:
    //需要有一个公共的刷新方法
    public void Refresh_Method()
    {
    //...
    }
    Form2 f2 = new Form2() ;
    f2.ShowDialog(this) ;
    //Form2:
    private Form1 p_f1;
    public Form2(Form1 f1)
    {
    InitializeComponent();
    p_f1 = f1;
    }
    //刷新时
    p_f1.Refresh_Method() ;
    方法3:属性法
    //Form1:
    //需要有一个公共的刷新方法
    public void Refresh_Method()
    {
    //...
    }
    //调用时
    Form2 f2 = new Form2() ;
    f2.P_F1 = this;
    f2.Show() ;//Form2:
    private Form1 p_f1;
    public Form1 P_F1
    {
    get{return p_f1;}
    set{p_f1 = value;}
    }
    //刷新时
    p_f1.Refresh_Method() ;
    方法4:委托法
    //声明一个委托
    public delegate void DisplayUpdate();
    //Form1:
    //需要有一个公共的刷新方法
    public void Refresh_Method()
    {
    //...
    }
    //调用时
    Form2 f2 = new Form2() ;
    f2.ShowUpdate += new DisplayUpdate(Refresh_Method) ;
    f2.Show() ;
    //Form2:
    //声明事件
    public event DisplayUpdate ShowUpdate;
    //刷新时,放在需要执行刷新的事件里
    ShowUpdate();