参考:.NET 中的委托

委托的两大用处

1、委托可以实现方法作为参数进行传递,如

/// <summary>
/// the English speaker.
/// </summary>
/// <param name="name">The name.</param>
public void EnglishSpeaker(string name)
{
Console.WriteLine(
string.Format("Hello my name is {0} and I am English speaker.\n", name));
} /// <summary>
/// the Chineses speaker.
/// </summary>
public void ChineseSpeaker(string name)
{
Console.WriteLine(
string.Format("您好我的名字叫{0},我是讲普通话的。\n", name));
} /// <summary>
/// The base say function.
/// </summary>
/// <param name="name">The name.</param>
/// <param name="speaker">The speaker.</param>
private static void Say(string name, SpeakDelegate speaker)
{
///Inoke the speaker function.
speaker(name);
} ///传递函数名进行委托方法绑定
Program.Say("钧航", ChineseSpeaker);
Program.Say("JK.Rush", EnglishSpeaker);

2、委托可以进行计算,加减,使得运行委托后就按顺序运行委托所承载的方法

namespace Multi_Delegate
{
delegate void StringProcessor();
public class Person
{
private string _Name;
public Person(string name)
{
this._Name = name;
} public void Say()
{
Console.WriteLine("Hello my name is {0}, what's your name.\n", this._Name);
} public void Reply()
{
Console.WriteLine("Hello my name is {0} and nice to meet you.\n", this._Name);
}
} class Program
{
static void Main(string[] args)
{
Person Jack = new Person("Jack");
Person Oliver = new Person("Oliver");
StringProcessor sp = null;
//绑定多播方法调用
sp += Jack.Say;
sp += Oliver.Reply;
sp();
Console.ReadKey();
}
}
}

下面的代码是我模块winform的事件机制,一看就懂。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ClassLibrary.事件
{
class 模拟控件事件机制
{ } public class Form1
{
MyButton button1;
public Form1()
{
FormIni();
button1.Text = "";
}
public void FormIni()
{
this.button1 = new MyButton("button1");///
button1.TextChanged += new MyButton.MyButtonTextChangedHandler(Button1OnTextChanged) ;
} void Button1OnTextChanged(object send, MyButtonEventArgs e)
{
Console.WriteLine("button1的Text属性改变后调用,MyButtonEventArgs的message信息为:"+e.Message);
} } /// <summary>
/// 定义Button
/// </summary>
class MyButton
{
/// <summary>
/// 按钮的Text
/// </summary>
private string text;
public string Text
{
get { return text; }
set { text = value; OnTextChanged(new MyButtonEventArgs(name)); }
}
private string name; public string Name
{
get { return name; }
set { name = value; }
}
public MyButton(string name)
{
Name = name;
} ///定义事件的委托
public delegate void MyButtonTextChangedHandler(object sender, MyButtonEventArgs e); ///定义事件
public event MyButtonTextChangedHandler TextChanged;
///定义引发事件的方法OnTextChanged()
private void OnTextChanged(MyButtonEventArgs e)
{
e.Message = name;
Console.WriteLine("MyButton的Text属性改变,MyButton控件的事件TextChanged发生了,转入信息:"+e.Message);
TextChanged(this, e);///如果没有这一行,MyButton的Text改变后引起的其它操作就不能运行
} } /// <summary>
/// 自定义事件参数
/// </summary>
class MyButtonEventArgs
{
private string message;/// public string Message
{
get { return message; }
set { message = value; }
} public MyButtonEventArgs(string message)
{
this.message = message;
} } }

模拟winform里的控件的事件和委托机制的更多相关文章

  1. WinForm动态添加控件及其事件(转)

    出处:http://blog.sina.com.cn/s/blog_60d576800100tf61.html 1        private void PhotoForm_Load(object  ...

  2. C#winform窗体用户控件自定义事件

    C#许多事情都和事件有关系,大部分的事情我们可以通过C#自己的事件来完成,但如果我们自己新建了一个自定义控件,我们该如何定义自己想要的事件呢?下面我就来为大家粗略的讲解一番. 假设我们自定义了一个控件 ...

  3. winform 动态添加控件及事件

    for (int i = 0; i < 4; i++) { Button btn = new Button(); //btn.Name = dt.Rows[i]["ANDON_CONT ...

  4. Android 使用代码主动去调用控件的点击事件(模拟人手去触摸控件)

    使用代码主动去调用控件的点击事件(模拟人手去触摸控件) //View 可以是LinearLayout,Button,TextView View.performClick();

  5. [转] WinForm实现移除控件某个事件的方法

    原文 WinForm实现移除控件某个事件的方法 本文实例讲述了WinForm实现移除控件某个事件的方法,供大家参考借鉴一下.具体功能代码如下: 主要功能部分代码如下: /// <summary& ...

  6. WinForm中动态添加控件 出现事件混乱,解决办法记录。

    还是在抢票软件中出的问题,我没点击一个联系人,要生成一排控件,其中有席别combobox这样的下拉框控件,会出现如下图所示的问题:问题描述:在代码中动态创建的控件,事件混乱了,一个控件触发了所有同类型 ...

  7. C# winform中自定义用户控件 然后在页面中调用用户控件的事件

    下面是用户控件的代码: using System; using System.Collections.Generic; using System.ComponentModel; using Syste ...

  8. 转:C# WinForm窗体及其控件的自适应

    一.说明 2012-11-30 曾经写过 <C# WinForm窗体及其控件自适应各种屏幕分辨率>  ,其中也讲解了控件自适应的原理.近期有网友说,装在panel里面的控件,没有效果? 这 ...

  9. C# WinForm窗体及其控件自适应各种屏幕分辨率

    C# WinForm窗体及其控件自适应各种屏幕分辨率 一.说明  我们自己编写程序的界面,会遇到各种屏幕分辨率,只有自适应才能显的美观.实际上,做到这点也很简单,就是首先记录窗体和它上面控件的初始位置 ...

随机推荐

  1. OpenXml读取word内容(一)

    OpenXml读取word内容注意事项 1.使用OpenXml读取word内容,word后缀必须是".docx":如果word后缀是".doc"需要转成&quo ...

  2. 》》mui--图片轮播

    mui框架内置了图片轮播插件,通过该插件封装的JS API,用户可以设定是否自动轮播及轮播周期,如下为代码示例: //获得slider插件对象 var gallery = mui('.mui-slid ...

  3. ADC/DAC设计常见40问

    本文章是关于ADC/DAC设计经典问答,涵盖时钟占空比.共模电压.增益误差.微分相位误差.互调失真等常见问题. 1. 什么是小信号带宽(SSBW)? 小信号带宽(Small Signal Bandwi ...

  4. 【百度之星2014~初赛(第二轮)解题报告】JZP Set

    声明 笔者近期意外的发现 笔者的个人站点http://tiankonguse.com/ 的非常多文章被其他站点转载,可是转载时未声明文章来源或參考自 http://tiankonguse.com/ 站 ...

  5. Spring基础知识之依赖注入

    Spring框架的四大原则: 1)使用POJO进行轻量级和最小侵入式的开发. 2)通过依赖注入和基于接口编程实现松耦合. 3)通过AOP和默认习惯进行声明式编程. 4)使用AOP和模板(templat ...

  6. JAVA入门[6]-Mybatis简单示例

    初次使用Mybatis,先手写一个hello world级别的例子,即根据id查询商品分类详情. 一.建表 create table Category ( Id INT not null, Name ...

  7. @Autowired注解在抽象类中实效的原因分析

    最近在工作中遇到这个问题,在抽象类中使用Autowired这个注解,注入mybatis的dao时,总是出现空指针异常,通过日志的打印,发现是这个dao注入失败为空.然后通过new出spring上下文对 ...

  8. CentOS 7下Samba服务器的安装与配置

    文基于<CentOS 6.3下Samba服务器的安装与配置>,参照原博文,自己在CentOS7环境上实现,并按照自己的环境修改博文内容 一.简介 Samba是一个能让Linux系统应用Mi ...

  9. sql基础题目测试及正确答案

    在网上做了一套基本的sql题目,以下是我的写的答案,适合基础人员练练 --创建测试数据 use test create table Student(S# varchar(10),Sname nvarc ...

  10. 【CSS3】动画animation-关键帧keyframes

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...