C# delegate 学习 (练这么久终于悟出来点东东了,继续加油! ^_^)
前言
从事开发工作两年有余了,但还是对Delegate,Event神马的看见就头疼,文章看过无数,自己也练习过好多遍,但到用的时候或者人家换了一种形式之后就又不懂了,哎~智商捉急啊!!
但是,这两天的收获还是不错的~!所以筒子们一定要有信心+几分坚持,回头一看,原来是这么简单。
正文
下面是我练习时做的一个小例子,在这记录下来,一是提醒自己,二来也许还能帮助到别人。:P
跟着我的思路走,你会发现 so easy.
一、祝福传递功能
流程如图:
1、第一步很简单,就不多说了。但是注意要设置frm3.MdiParent = this;
Form3 frm3 = new Form3();
frm3.MdiParent = this;
frm3.Show();
2、来看第二步,首先要明确我们的目的是什么?
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();
3、在下拉框选择完对应的的类型之后,点击添加进行传值+修改颜色,只需简单几步,然后就大功告成了!哈哈
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界面的类型后面还有一个添加按钮,那么这个按钮的功能是什么呢?
二、动态添加祝福类型
1、跟上面一样,还是先搞清楚需求,这里很简单,我们需要给frmContent窗体的祝福类型下面加Item
那么先写方法吧。
public void AddCbo(string text)
{
this.comboBox1.Items.Add(text);
}
2、添加事件
private void button2_Click(object sender, EventArgs e)
{
Form4 frm4 = new Form4();
frm4.setValue = AddCbo; //注意这里
frm4.ShowDialog();
}
3、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
随机推荐
- JAVASCRIPT中的作用域和原型链,应该算是难点了,要好好多学学,练练
今天初六,要上班啦... JAVASCRIPT,看来是丢不了了.. http://www.dengdeng90.com/wordpress/?p=241 http://www.cnblogs.com/ ...
- java:内部类与外部类的区别和联系
注意事项一:在内部类中可以随意使用外部类的成员方法以及成员变量. 众所周知,在定义成员方法或者成员变量的时候,可以给其加上一些权限的修饰词,以防止其他类的访问.如在成员变量或者成员方法前面,加上Pri ...
- JavaWeb项目开发案例精粹-第3章在线考试系统-001设计
1. 2. 3. 4. # MySQL-Front 5.0 (Build 1.0) /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE */; /*!40101 SET SQL ...
- Servlet小示例:jsp页面提交信息Servlet接收并打印输出
该示例采用doPost方法提交表单,该示例一共包含两个文件. 一个是用来提交用户信息的表单userForm2.jsp,另一个是用来接收参数的Servlet. userForm2.jsp <%@ ...
- Eclipse groovy in action
Eclipse :Version: Juno Service Release 2GrEclipse plugins:http://dist.springsource.org/release/GRECL ...
- SAP 物料基本单位与BOM单位
比如:物料的基本单位是G,可该物料放到BOM中的单位却是PC,该如何实现呢? 1. 首先要弄清楚BOM单位优先取的是发货单位(工厂数据视图1),当发货单位为空时,取基本单位: 2. 然后再建立单位G ...
- Spring Data JPA教程, 第三部分: Custom Queries with Query Methods(翻译)
在本人的Spring Data JPA教程的第二部分描述了如何用Spring Data JPA创建一个简单的CRUD应用,本博文将描述如何在Spring Data JPA中使用query方法创建自定义 ...
- vs2012 arcgis engine 10 丢失arcgis模板
1.Visual Studio 2012环境下安装ArcGIS Engine 10 Visual Studio 2012环境下安装ArcObject SDK for the Microsoft .Ne ...
- (六)Ireport制作一个规范的报表,处理数据格式
转载:http://frankco.iteye.com/blog/1686651 删除注释信息,Report Respector面板中按住Ctrl鼠标选中位于报表每个部分的组件,使用键盘的方向键可以左 ...
- dom4j修改,获取,增加xml中某个元素的属性值
XML文件: <?xml version="1.0" encoding="UTF-8"?> <vrvscript> <item I ...