向C#高手请教:关于委托

dxiuquan 2009-03-05 04:57:40

public partial class Form1 : Form
{
public EventHandler EH;
public Form1()
{
InitializeComponent();
Button b1 = new Button();
b1.Click += EH;
this.Controls.Add(b1);

}

private void button1_Click(object sender, EventArgs e)
{
EH = test;
}

private void test(object sender,EventArgs e)
{
MessageBox.Show("ddddddddddddd");
}

}


为什么先点击了button1,再点击b1,不能显示出消息来?应该怎么做才能实现这种要求啊?请高手赐教
...全文
74 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dxiuquan 2009-03-05
  • 打赏
  • 举报
回复
楼上的方法我知道,但我是希望在窗体类Form1外部可以直接给EH赋值达到执行外部方法的目的。
dxiuquan 2009-03-05
  • 打赏
  • 举报
回复
晕了,难道EventHandler 不是引用类型而是值类型吗
北京的雾霾天 2009-03-05
  • 打赏
  • 举报
回复
你可以直接这样做:

Button b1 = new Button();
b1.Click += test;
this.Controls.Add(b1);


也可以这样做:


public partial class Form1 : Form
{
public EventHandler EH;
public Form1()
{
InitializeComponent();
Button b1 = new Button();
b1.Name = "b1";
this.Controls.Add(b1);

}

private void button1_Click(object sender, EventArgs e)
{
EH = test;
this.Controls["b1"].Click += EH;
}

private void test(object sender,EventArgs e)
{
MessageBox.Show("ddddddddddddd");
}

}

北京的雾霾天 2009-03-05
  • 打赏
  • 举报
回复
你是先执行了: b1.Click += EH;
而后又对EH进行了另外赋值:EH = test;

因此此时的b1.click并没有指向test;所以不会执行Test方法。
zgke 2009-03-05
  • 打赏
  • 举报
回复
你给b1.Click += EH;添加了一个空..... 当然执行的时候没有了

当你获取了方法 EH = test; 并没有个b1.Click附值啊

111,126

社区成员

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

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

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