小弟最近作一个项目,做一个方法,要求传入一个控件参数control类,然后再我的方法里面用托管的方法,用代码实现触发按钮按下事件(如button1_Click),这里涉及一个问题,就是传入一个control类 ,比如说Button1,怎么获取Button1的click方法?
如下相关代码:
public void delegate mDG(object sender, eventargs e);
public class mClass
{
    .....
public void mButtonControl(control con)
  {
     mDG dg=new mDG(//问题所在了,怎么在这里用某个方法获得Button1_Click这个方法?);
     eventargs e;
     dg(con,e);
  }
}

解决方案 »

  1.   

    你这个地方实际上是不是没有按下这个button,但是想让他执行按下按钮的效果,是吧?
      

  2.   

    button_click就是专门为了捕捉按键的,然后捕捉到之后执行一段代码
    现在你不按键就想执行这段代码直接把这段代码放到这个函数中不就行了。。
      

  3.   

    button1_Click方法应该是在Form1中定义的吧,你在Button中怎么找?
      

  4.   

    楼主你这的确跟反射没一点关系。顶多算是跟委托有关系。
    但是呢,你这个情况根本不需要用委托。public void mButtonControl(control con)
    {
           button1_Click(null,null);//直接调就O了。
    }
      

  5.   

    看起来这应该是传进来Control的一个通用行为,建议楼主定义一个借口,例如下面这样。然后确保控件实现这样的借口,传递的时候只传这个接口即可,或者传进来controlpublic interface IButtonClicker
    {
      void ClickButton();
    }//传递接口
    public void Invoke(IButtionClicker clicker)
    {
       if (clicker != null) clicker.ClickButton();
    }//或者传递进来control
    public void Invoke(Control control)
    {
       IButtionClicker clicker = control as IButtonClicker;
       if (clicker != null) clicker.ClickButton();
    }
      

  6.   

    晕,不行的,不能确定Button的Click事件,不信自己试试~
      

  7.   

    别反射了,,看看这个吧,直接调用mButtonControl(button1);public void mButtonControl(Button btn)
    {
      btn.PerformClick();
    }
      

  8.   

    Button有个方法叫PerformClick(),调用这个方法就可以触发一次Click事件,也就是说,你必须确保传进来的Control是一个Button。写下面的代码:        public void mButtonControl(Control con)
            {
                Button btn = con as Button;
                if (btn != null)
                {
                    btn.PerformClick();
                }
            }
      

  9.   

    如果传进来的Control不是一个Button,那么这个方法就不能这么调用了,因为你也不知道传进来的Control有没有类似Click这样的一个事件。
    还有一种做法,就是用反射了,因为Control上面有一个虚方法void OnClick(EventArgs e),这个方法在Control类上面负责触发Click消息,但它是Protected的你不能直接调用,因此你必须使用反射调用这个OnClick方法,大部分情况下也会触发Click事件,为什么说大部分呢?如果传进来的Control是一个自定义Control,并且Override了Control.OnClick方法,并且没有调用base.OnClick(),那么,对不起,用反射也没有任何作用了。希望对你有帮助。