前言this
从事开发工做两年有余了,但仍是对Delegate,Event神马的看见就头疼,文章看过无数,本身也练习过好多遍,但到用的时候或者人家换了一种形式以后就又不懂了,哎~智商捉急啊!!spa
可是,这两天的收获仍是不错的~!因此筒子们必定要有信心+几分坚持,回头一看,原来是这么简单。code
正文orm
下面是我练习时作的一个小例子,在这记录下来,一是提醒本身,二来也许还能帮助到别人。:Pblog
跟着个人思路走,你会发现 so easy.事件
1、祝福传递功能开发
流程如图:get
一、第一步很简单,就很少说了。可是注意要设置frm3.MdiParent = this;博客
Form3 frm3 = new Form3(); frm3.MdiParent = this; frm3.Show();
二、来看第二步,首先要明确咱们的目的是什么?string
1)修改Form3中的ListBox1中的值;
2)改变背景色为Green。
那么两件事,咱们就须要两个方法来完成(这里有人会想:笨,这么简单的需求放到一个方法不就好了么?由于真正的项目需求是不会这么简单的,呵呵)。
这两件事都是针对Form3的,因此咱们把这两个方法加到Form3里面。
//更新文字方法 public void SetText(string text) { this.listBox1.Items.Add(text); } //更新背景颜色方法 public void SetColor(Color color) { this.BackColor = color; }
OK,方法加进去以后,咱们继续走,单击Open,打开模式窗体frmContent。
frmContent content = new frmContent(); content.ShowDialog();
三、在下拉框选择完对应的的类型以后,点击添加进行传值+修改颜色,只需简单几步,而后就大功告成了!哈哈
1)声明委托。(跟方法的声明同样,只不过多加一个delegate,还有不须要方法体)
public delegate void GetTextHandle(string text); //申明委托 public delegate void GetColorHandle(Color color); //申明委托
2)实例化。(紧接着,下一步就进行实例化,仍是同样,方法怎么实例化,委托就怎么实例化,这里给一个null值)
public GetTextHandle getTextHandle = null; public GetColorHandle getColorHandle = null;
3)使用。(使用前要作非空判断,而后将textBox1中的值传递过去就哦了)
private void button1_Click(object sender, EventArgs e) { if (getTextHandle != null) { getTextHandle(this.textBox1.Text); } if (getColorHandle != null) { getColorHandle(Color.Green); } }
好了,是否是火烧眉毛想感觉下成果,运行试试看,咦?为毛点了添加没反应??
跟踪代码发现 getTextHandle 为空!这是为何呢?
仔细观察一下,发现第二步和第三步在委托这块基本没半毛钱关系,难怪会点了没反应。
因此咱们须要在第二步加入一行代码:
frmContent content = new frmContent(); content.getTextHandle = SetText;
content.getColorHandle = SetColor; content.ShowDialog();
这段话的意思就是将SetText和SetColor方法当参数传递给frmContent的getTextHandle和getColorHandle。
OK,如今应该是没什么问题了。
为了进一步加深理解,咱们还要增长一个功能,没错,在frmContent界面的类型后面还有一个添加按钮,那么这个按钮的功能是什么呢?
2、动态添加祝福类型
一、跟上面同样,仍是先搞清楚需求,这里很简单,咱们须要给frmContent窗体的祝福类型下面加Item
那么先写方法吧。
public void AddCbo(string text) { this.comboBox1.Items.Add(text); }
二、添加事件
private void button2_Click(object sender, EventArgs e) { Form4 frm4 = new Form4(); frm4.setValue = AddCbo; //注意这里 frm4.ShowDialog(); }
三、Form4窗体代码
public delegate void SetValue(string text); public SetValue setValue = null; private void button1_Click(object sender, EventArgs e) { if (setValue!=null) { setValue(textBox1.Text); } }
OK,至此,委托就完了,固然这些只是皮毛,后续我会慢慢补充完整!
欢迎你们来个人博客参观:http://www.cnblogs.com/xw-yanger/
demo下载地址:Demo