+=运算符的问题

whatdoyousay 2014-07-22 04:16:33
刚学习C#,对里面的OOP概念头痛,之前只会一点VB...所以基本啥都不会,各位高手请指教哈



private void button1_Click(object sender, EventArgs e)
{
((Button)sender).Text = "Clicked!";
Button newButton = new Button();
newButton.Text = "New Button!";
newButton.Click += new EventHandler(newButton_Click);
//请问这里的+=不是先加后赋值运算符么,请问这一句怎么解释;
Controls.Add(newButton);
}
private void newButton_Click(object sender, System.EventArgs e)
{
((Button)sender).Text = "Clicked!!";
//上面这一句里面的sender又是干嘛的,百度了一下,说是有多个按钮的时候用的
}
...全文
157 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmakebest 2014-07-22
  • 打赏
  • 举报
回复
C# 的独创就是事件可以绑定很多个,所以有 += 语法最合适了.
whatdoyousay 2014-07-22
  • 打赏
  • 举报
回复
引用 9 楼 Z65443344 的回复:
Button newButton = new Button(); 这个newButton其实是Button的Handle,就是你可以用此变量去访问button,它是个引用类型,并非button本身 如果你这个button最终没有放到任何容器中,就没有意义了. 当然你也可以定义Button newButton =(Button)sender;来引用引发事件的button,相当获得button的handle
大概明白了一点,多谢
whatdoyousay 2014-07-22
  • 打赏
  • 举报
回复
引用 8 楼 liuchaolin 的回复:
[quote=引用 7 楼 liuhuibing12 的回复:] [quote=引用 1 楼 happy09li 的回复:] newButton.Click += new EventHandler(newButton_Click); 这个是给按钮注册事件用的 Object sender,EventArgs e是事件的委托方传递的参数信息,其中sender是事件源,表示触发事件的那 个组件,比如说你按下按钮,那么sender就是按钮。EventArgs是事件参数,比如说你用鼠标点击窗体,那么EventArgs是会包含点击的位置等等它用来辅助你处理事件。 有时候会把触发事件的控件自身传递过来,便于筛检和处理,因为有时会有多个事件委托给一个事件处理函数处理。具体有没有参数要看委托声明形式。
给控件注册事件都可以用 事件+=new EventHandler( 事件); 来注册 那如果到了某条件下,我需要暂时关闭该事件该怎么做呢,比如我连续按了三下commandbutton后就不激活click事件[/quote] 不是还有一个-=吗?[/quote] 我猜也是这样
於黾 2014-07-22
  • 打赏
  • 举报
回复
Button newButton = new Button(); 这个newButton其实是Button的Handle,就是你可以用此变量去访问button,它是个引用类型,并非button本身 如果你这个button最终没有放到任何容器中,就没有意义了. 当然你也可以定义Button newButton =(Button)sender;来引用引发事件的button,相当获得button的handle
md5e 2014-07-22
  • 打赏
  • 举报
回复
引用 7 楼 liuhuibing12 的回复:
[quote=引用 1 楼 happy09li 的回复:] newButton.Click += new EventHandler(newButton_Click); 这个是给按钮注册事件用的 Object sender,EventArgs e是事件的委托方传递的参数信息,其中sender是事件源,表示触发事件的那 个组件,比如说你按下按钮,那么sender就是按钮。EventArgs是事件参数,比如说你用鼠标点击窗体,那么EventArgs是会包含点击的位置等等它用来辅助你处理事件。 有时候会把触发事件的控件自身传递过来,便于筛检和处理,因为有时会有多个事件委托给一个事件处理函数处理。具体有没有参数要看委托声明形式。
给控件注册事件都可以用 事件+=new EventHandler( 事件); 来注册 那如果到了某条件下,我需要暂时关闭该事件该怎么做呢,比如我连续按了三下commandbutton后就不激活click事件[/quote] 不是还有一个-=吗?
whatdoyousay 2014-07-22
  • 打赏
  • 举报
回复
引用 1 楼 happy09li 的回复:
newButton.Click += new EventHandler(newButton_Click); 这个是给按钮注册事件用的 Object sender,EventArgs e是事件的委托方传递的参数信息,其中sender是事件源,表示触发事件的那 个组件,比如说你按下按钮,那么sender就是按钮。EventArgs是事件参数,比如说你用鼠标点击窗体,那么EventArgs是会包含点击的位置等等它用来辅助你处理事件。 有时候会把触发事件的控件自身传递过来,便于筛检和处理,因为有时会有多个事件委托给一个事件处理函数处理。具体有没有参数要看委托声明形式。
给控件注册事件都可以用 事件+=new EventHandler( 事件); 来注册 那如果到了某条件下,我需要暂时关闭该事件该怎么做呢,比如我连续按了三下commandbutton后就不激活click事件
於黾 2014-07-22
  • 打赏
  • 举报
回复
引用 4 楼 liuhuibing12 的回复:
[quote=引用 2 楼 Z65443344 的回复:] 这里是为click订阅事件 可以订阅多个事件,所以用+=而不是= sender,顾名思义,是事件的发起者,而e是参数 如果发起者是个按钮,可以将(Button)sender强制转换成button
那这里的(Button)sender可不可以换成newButton,也就是说newButton.Text = "Clicked!!";[/quote] 当然不能.你的newButton不是在这定义的,生存周期已到,被回收了.
md5e 2014-07-22
  • 打赏
  • 举报
回复
sender代表是哪个控件触发的 newButton.Click += new EventHandler(newButton_Click); 如果还有一个按钮 newButton2.Click += new EventHandler(newButton_Click); ((Button)sender).Text = "Clicked!!"; ==> ((Button)sender)可以是newButton也可以是newButton2
whatdoyousay 2014-07-22
  • 打赏
  • 举报
回复
引用 2 楼 Z65443344 的回复:
这里是为click订阅事件 可以订阅多个事件,所以用+=而不是= sender,顾名思义,是事件的发起者,而e是参数 如果发起者是个按钮,可以将(Button)sender强制转换成button
那这里的(Button)sender可不可以换成newButton,也就是说newButton.Text = "Clicked!!";
shenlanql 2014-07-22
  • 打赏
  • 举报
回复
这个+= 应用与“事件”上去的方式。你可以先去了解下C# event(事件)。 这里+= 可以理解为 给newButton.Click 添加一个处理函数newButton_Click。 即鼠标点击newButton 按钮时,调用newButton_Click。 这个跟VB是一样的。
於黾 2014-07-22
  • 打赏
  • 举报
回复
这里是为click订阅事件 可以订阅多个事件,所以用+=而不是= sender,顾名思义,是事件的发起者,而e是参数 如果发起者是个按钮,可以将(Button)sender强制转换成button
熙风 2014-07-22
  • 打赏
  • 举报
回复
newButton.Click += new EventHandler(newButton_Click); 这个是给按钮注册事件用的 Object sender,EventArgs e是事件的委托方传递的参数信息,其中sender是事件源,表示触发事件的那 个组件,比如说你按下按钮,那么sender就是按钮。EventArgs是事件参数,比如说你用鼠标点击窗体,那么EventArgs是会包含点击的位置等等它用来辅助你处理事件。 有时候会把触发事件的控件自身传递过来,便于筛检和处理,因为有时会有多个事件委托给一个事件处理函数处理。具体有没有参数要看委托声明形式。

111,092

社区成员

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

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

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