问个C#事件委托的语法

mohugomohu 2011-12-30 03:51:34
            Button b1 = new Button();
b1.Click += new EventHandler(b1_Click);

Button b2 = new Button();
b2.Click += ???


假如有两个按钮事件,我想把b1的点击事件赋值给b2,
就像
int i1=20;
int i2=i1;

OK??????

当然,直接写b2.Click +=new EventHandler(b1_Click);也是可以的,但是这样要改的话就麻烦了,而且按钮很多。
...全文
283 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
cfvgodot 2011-12-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mohugomohu 的回复:]

引用 3 楼 ccy_qty 的回复:

应该可以,定义一个公共的按钮事件委托.
public event btnClickEventHander btnClick;

我只是想看看委托能不能赋值,因为我封装了一个方法,就是把一个按钮的数据全部复制给另一个按钮,包括事件。
[/Quote]

自定义控件?BUTTON继承下来。。。在里边写你自己要的东西然后封装呢?
cfvgodot 2011-12-31
  • 打赏
  • 举报
回复
额 那啥 楼上那个回复错了 是给另外一个帖子的地址 搞错搞错……
cfvgodot 2011-12-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mohugomohu 的回复:]

引用 1 楼 z81434362 的回复:

b2.Click +=new EventHandler(b1_Click);就一句啊 你还想怎么简单


例子1:
int i1=20;
int i2=i1;
int i3=i1;
int i4=i1;

例子2:
int i1=20;
int i2=20;
int i3=20;
int i4=20;


我想要的……
[/Quote]

BTTTON继承下来重写

http://topic.csdn.net/u/20110331/17/08451c7b-d9af-4a94-882c-84e81dab2efc.html
之握成 2011-12-31
  • 打赏
  • 举报
回复
你就写个通用的button事件。
劉宏哲 2011-12-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mohugomohu 的回复:]

引用 6 楼 ccy_qty 的回复:

可以的.测试可以执行.
C# code

private void Form1_Load(object sender, EventArgs e)
{
button1.Click += btn_Click;
button2.Click += btn_Click;
button3.Click += btn_C……

你说的这个跟我需求不……
[/Quote]
这个答案是对的,这个哪里不满足你的需求?
ohkuy 2011-12-31
  • 打赏
  • 举报
回复
看不明白,一个值类型, 一个引用类型,
怎么能一样?
杨友山 2011-12-31
  • 打赏
  • 举报
回复
很有想法,不过应该不行
wxssaa 2011-12-31
  • 打赏
  • 举报
回复
还有个办法,重载一个Button,事件注册里加上你要的btn_Clieck。

wxssaa 2011-12-31
  • 打赏
  • 举报
回复
大概了解楼主的意思,我也不会事件的赋值。不过你试试看控件数组能不能替你绕开这个问题。

Button[] btns = new Button[9];

private void ShowButtonArray()
{
for(int i = 0; i < 9; i++)
{
btns[i] = new Button(); //这一句往往为初学者忽视,须知要创建对象的实例!
btns[i].Location = new System.Drawing.Point(100 + 50 * (i % 3),100 + 50 * (i / 3));
btns[i].Name = "btnTest";
btns[i].Size = new System.Drawing.Size(48, 48);
btns[i].Text = i.ToString();
btns[i].Click += new System.EventHandler(this.btns_Click); //统一的事件处理
this.Controls.Add(btns[i]); //在窗体上呈现控件
}
}

private void btns_Click(object sender, System.EventArgs e)
{
MessageBox.Show(((Button)sender).Text + " was clicked !"); //通过sender判断激发事件的控件
}

private void Form1_Load(object sender, System.EventArgs e)
{
ShowButtonArray();
}

qiao910527 2011-12-31
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 liuhongzhe 的回复:]
引用 7 楼 mohugomohu 的回复:

引用 6 楼 ccy_qty 的回复:

可以的.测试可以执行.
C# code

private void Form1_Load(object sender, EventArgs e)
{
button1.Click += btn_Click;
button2.Click += btn_Click;
button3.Click……
[/Quote]

LZ闲这样麻烦。。。据他的问题来看
mohugomohu 2011-12-31
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ohkuy 的回复:]

看不明白,一个值类型, 一个引用类型,
怎么能一样?
[/Quote]
我好像也没说过他们一样,只是问问有没有这种语法
mohugomohu 2011-12-31
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 liuhongzhe 的回复:]

引用 7 楼 mohugomohu 的回复:

引用 6 楼 ccy_qty 的回复:

可以的.测试可以执行.
C# code

private void Form1_Load(object sender, EventArgs e)
{
button1.Click += btn_Click;
button2.Click += btn_Click;
button3.Clic……
[/Quote]
你这个是共用一个委托,但是我想要的是把一个委托赋值给另一个委托,还是有点区别的。
lyx266 2011-12-30
  • 打赏
  • 举报
回复
楼主的意思然道是像这样button1.Click = button2.Click;
这样好像不行的
事件他比较特殊 我们在类中定义了一个事件,他看上去好像是类的一个字段其实不是
通过查看事件定义的IL代码可以发现,我们定义的事件他是一个类似方法的东西
同时系统会给我们创建一个private的代理对象,这个对象的名字和我们定义的事件名是一样的。
而我们在类外部能调用的只是我们自己定义的那个事件(其实像一个方法),也就是只能订阅或取消事件。
闪耀星星 2011-12-30
  • 打赏
  • 举报
回复
+=订阅事件啊
mohugomohu 2011-12-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ccy_qty 的回复:]

可以的.测试可以执行.
C# code

private void Form1_Load(object sender, EventArgs e)
{
button1.Click += btn_Click;
button2.Click += btn_Click;
button3.Click += btn_C……
[/Quote]
你说的这个跟我需求不一样
蛇尾巴草 2011-12-30
  • 打赏
  • 举报
回复
可以的.测试可以执行.

private void Form1_Load(object sender, EventArgs e)
{
button1.Click += btn_Click;
button2.Click += btn_Click;
button3.Click += btn_Click;
}

private void btn_Click(object sender, EventArgs e)
{
MessageBox.Show("","");
}
mohugomohu 2011-12-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ccy_qty 的回复:]

应该可以,定义一个公共的按钮事件委托.
public event btnClickEventHander btnClick;
[/Quote]
我只是想看看委托能不能赋值,因为我封装了一个方法,就是把一个按钮的数据全部复制给另一个按钮,包括事件。
mohugomohu 2011-12-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 z81434362 的回复:]

b2.Click +=new EventHandler(b1_Click);就一句啊 你还想怎么简单
[/Quote]

例子1:
int i1=20;
int i2=i1;
int i3=i1;
int i4=i1;

例子2:
int i1=20;
int i2=20;
int i3=20;
int i4=20;


我想要的是例子1的效果
蛇尾巴草 2011-12-30
  • 打赏
  • 举报
回复
应该可以,定义一个公共的按钮事件委托.
public event btnClickEventHander btnClick;
cfvgodot 2011-12-30
  • 打赏
  • 举报
回复
- -# 按钮很多是啥意思?
加载更多回复(1)

110,533

社区成员

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

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

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