前言

  从事开发工作两年有余了,但还是对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

    

随机推荐

  1. JAVASCRIPT中的作用域和原型链,应该算是难点了,要好好多学学,练练

    今天初六,要上班啦... JAVASCRIPT,看来是丢不了了.. http://www.dengdeng90.com/wordpress/?p=241 http://www.cnblogs.com/ ...

  2. java:内部类与外部类的区别和联系

    注意事项一:在内部类中可以随意使用外部类的成员方法以及成员变量. 众所周知,在定义成员方法或者成员变量的时候,可以给其加上一些权限的修饰词,以防止其他类的访问.如在成员变量或者成员方法前面,加上Pri ...

  3. JavaWeb项目开发案例精粹-第3章在线考试系统-001设计

    1. 2. 3. 4. # MySQL-Front 5.0 (Build 1.0) /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE */; /*!40101 SET SQL ...

  4. Servlet小示例:jsp页面提交信息Servlet接收并打印输出

    该示例采用doPost方法提交表单,该示例一共包含两个文件. 一个是用来提交用户信息的表单userForm2.jsp,另一个是用来接收参数的Servlet. userForm2.jsp <%@ ...

  5. Eclipse groovy in action

    Eclipse :Version: Juno Service Release 2GrEclipse plugins:http://dist.springsource.org/release/GRECL ...

  6. SAP 物料基本单位与BOM单位

    比如:物料的基本单位是G,可该物料放到BOM中的单位却是PC,该如何实现呢? 1. 首先要弄清楚BOM单位优先取的是发货单位(工厂数据视图1),当发货单位为空时,取基本单位: 2. 然后再建立单位G ...

  7. Spring Data JPA教程, 第三部分: Custom Queries with Query Methods(翻译)

    在本人的Spring Data JPA教程的第二部分描述了如何用Spring Data JPA创建一个简单的CRUD应用,本博文将描述如何在Spring Data JPA中使用query方法创建自定义 ...

  8. vs2012 arcgis engine 10 丢失arcgis模板

    1.Visual Studio 2012环境下安装ArcGIS Engine 10 Visual Studio 2012环境下安装ArcObject SDK for the Microsoft .Ne ...

  9. (六)Ireport制作一个规范的报表,处理数据格式

    转载:http://frankco.iteye.com/blog/1686651 删除注释信息,Report Respector面板中按住Ctrl鼠标选中位于报表每个部分的组件,使用键盘的方向键可以左 ...

  10. dom4j修改,获取,增加xml中某个元素的属性值

    XML文件: <?xml version="1.0" encoding="UTF-8"?> <vrvscript> <item I ...