反射,求高手解决问题

mckingstar 2010-04-21 03:48:09
小弟最近作一个项目,做一个方法,要求传入一个控件参数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);
}
}
...全文
141 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
mckingstar 2010-04-22
  • 打赏
  • 举报
回复
嗯,谢谢大虾,简单实用了,呵呵[Quote=引用 13 楼 wedy_wang 的回复:]
Button有个方法叫PerformClick(),调用这个方法就可以触发一次Click事件,也就是说,你必须确保传进来的Control是一个Button。写下面的代码:

C# code

public void mButtonControl(Control con)
{
Button btn = con as Button;
……
[/Quote]
mckingstar 2010-04-22
  • 打赏
  • 举报
回复
嗯,谢谢大虾,简单实用了,呵呵[Quote=引用 13 楼 wedy_wang 的回复:]
Button有个方法叫PerformClick(),调用这个方法就可以触发一次Click事件,也就是说,你必须确保传进来的Control是一个Button。写下面的代码:

C# code

public void mButtonControl(Control con)
{
Button btn = con as Button;
……
[/Quote]
mckingstar 2010-04-22
  • 打赏
  • 举报
回复
嗯,谢谢大虾,简单实用了,呵呵~[Quote=引用 12 楼 mngzilin 的回复:]
别反射了,,看看这个吧,直接调用mButtonControl(button1);


C# code
public void mButtonControl(Button btn)
{
btn.PerformClick();
}
[/Quote]
wedy_wang 2010-04-21
  • 打赏
  • 举报
回复
如果传进来的Control不是一个Button,那么这个方法就不能这么调用了,因为你也不知道传进来的Control有没有类似Click这样的一个事件。
还有一种做法,就是用反射了,因为Control上面有一个虚方法void OnClick(EventArgs e),这个方法在Control类上面负责触发Click消息,但它是Protected的你不能直接调用,因此你必须使用反射调用这个OnClick方法,大部分情况下也会触发Click事件,为什么说大部分呢?如果传进来的Control是一个自定义Control,并且Override了Control.OnClick方法,并且没有调用base.OnClick(),那么,对不起,用反射也没有任何作用了。希望对你有帮助。
wedy_wang 2010-04-21
  • 打赏
  • 举报
回复
Button有个方法叫PerformClick(),调用这个方法就可以触发一次Click事件,也就是说,你必须确保传进来的Control是一个Button。写下面的代码:

public void mButtonControl(Control con)
{
Button btn = con as Button;
if (btn != null)
{
btn.PerformClick();
}
}
mngzilin 2010-04-21
  • 打赏
  • 举报
回复
别反射了,,看看这个吧,直接调用mButtonControl(button1);

public void mButtonControl(Button btn)
{
btn.PerformClick();
}
mckingstar 2010-04-21
  • 打赏
  • 举报
回复
晕,不行的,不能确定Button的Click事件,不信自己试试~[Quote=引用 9 楼 vsts2010 的回复:]
看起来这应该是传进来Control的一个通用行为,建议楼主定义一个借口,例如下面这样。然后确保控件实现这样的借口,传递的时候只传这个接口即可,或者传进来control


C# code
public interface IButtonClicker
{
void ClickButton();
}

//传递接口
public void Invoke(IButtionCli……
[/Quote]
mckingstar 2010-04-21
  • 打赏
  • 举报
回复
直接调小弟当然知道了,但是现在小弟做的东西涉及到上百个按钮按下事件的实现,那样一个一个明确调用的话就太麻烦了么[Quote=引用 8 楼 llddyy123wq 的回复:]
楼主你这的确跟反射没一点关系。顶多算是跟委托有关系。
但是呢,你这个情况根本不需要用委托。

C# code

public void mButtonControl(control con)
{
button1_Click(null,null);//直接调就O了。
}
[/Quote]
vsts2010 2010-04-21
  • 打赏
  • 举报
回复
看起来这应该是传进来Control的一个通用行为,建议楼主定义一个借口,例如下面这样。然后确保控件实现这样的借口,传递的时候只传这个接口即可,或者传进来control

public 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();
}


llddyy123wq 2010-04-21
  • 打赏
  • 举报
回复
楼主你这的确跟反射没一点关系。顶多算是跟委托有关系。
但是呢,你这个情况根本不需要用委托。

public void mButtonControl(control con)
{
button1_Click(null,null);//直接调就O了。
}
sxiaohui8709253 2010-04-21
  • 打赏
  • 举报
回复
学习 接分
CsToD 2010-04-21
  • 打赏
  • 举报
回复
button1_Click方法应该是在Form1中定义的吧,你在Button中怎么找?
liuyileneal 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mckingstar 的回复:]
嗯,对的~
[/Quote]
button_click就是专门为了捕捉按键的,然后捕捉到之后执行一段代码
现在你不按键就想执行这段代码。。。直接把这段代码放到这个函数中不就行了。。
mckingstar 2010-04-21
  • 打赏
  • 举报
回复
嗯,对的~[Quote=引用 3 楼 liuyileneal 的回复:]
引用楼主 mckingstar 的回复:
小弟最近作一个项目,做一个方法,要求传入一个控件参数control类,然后再我的方法里面用托管的方法,用代码实现触发按钮按下事件(如button1_Click),这里涉及一个问题,就是传入一个control类 ,比如说Button1,怎么获取Button1的click方法?
如下相关代码:
public void delegate mDG(objec……
[/Quote]
liuyileneal 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 mckingstar 的回复:]
小弟最近作一个项目,做一个方法,要求传入一个控件参数control类,然后再我的方法里面用托管的方法,用代码实现触发按钮按下事件(如button1_Click),这里涉及一个问题,就是传入一个control类 ,比如说Button1,怎么获取Button1的click方法?
如下相关代码:
public void delegate mDG(object sender, eventargs e)……
[/Quote]
你这个地方实际上是不是没有按下这个button,但是想让他执行按下按钮的效果,是吧?
mohugomohu 2010-04-21
  • 打赏
  • 举报
回复
这个跟反射没什么关系。
而且那个方法不是定义在控件内部的,反射也获取不到。
hqs19821108 2010-04-21
  • 打赏
  • 举报
回复
帮你顶一下

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧