小弟最近作一个项目,做一个方法,要求传入一个控件参数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);
}
}
如下相关代码:
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);
}
}
现在你不按键就想执行这段代码直接把这段代码放到这个函数中不就行了。。
但是呢,你这个情况根本不需要用委托。public void mButtonControl(control con)
{
button1_Click(null,null);//直接调就O了。
}
{
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();
}
{
btn.PerformClick();
}
{
Button btn = con as Button;
if (btn != null)
{
btn.PerformClick();
}
}
还有一种做法,就是用反射了,因为Control上面有一个虚方法void OnClick(EventArgs e),这个方法在Control类上面负责触发Click消息,但它是Protected的你不能直接调用,因此你必须使用反射调用这个OnClick方法,大部分情况下也会触发Click事件,为什么说大部分呢?如果传进来的Control是一个自定义Control,并且Override了Control.OnClick方法,并且没有调用base.OnClick(),那么,对不起,用反射也没有任何作用了。希望对你有帮助。