Samuel Learning

  • 联系
  •  
  • 管理

文章分类(203)

  • 01 ASP/HTML(6)
  • 02 Script/CSS(16)
  • 03 C/C++
  • 04 XML(4)
  • 05 微软编程(26)
  • 06 J2EE(60)
  • 09 Linux(14)
  • 10 Database(27)
  • 11 报表打印
  • 12 打包安装(1)
  • 13 模式重构(2)
  • 14 系统架构
  • 15 敏捷开发(11)
  • 16 案例分析(30)
  • 17 Workflow(1)
  • 18 配置管理(1)
  • 19 项目管理
  • 20 英语(4)

新闻分类(52)

  • CXF学习
  • Hibernate学习(1)
  • iBatis学习(16)
  • Struts1学习(1)
  • Struts2学习(34)

.NET资源

  • adxmenu
  • C# Open Source
  • DNN Directory
  • M2Land
  • Windows Form FAQ
  • 中国DNN
  • 中国DNN联盟

Ajax

  • DoJo
  • GWT
  • JQuery
  • jquery autocomplete
  • jquery flexgrid
  • JQuery Form
  • jquery masked input
  • JQuery UI
  • jquery validation
  • Jquery 图表
  • jquery报表
  • jquery插件集合
  • Qooxdoo
  • Tibco GI
  • YUI
  • YUI-EXT
  • ZeroKode

Java开源

  • ABLE
  • Agile Tao
  • Ajax4JSF
  • Alfresco
  • AppFuse
  • Compiere
  • Equinox
  • Findbugs
  • Geronimo
  • Grails
  • Harmony
  • Hibernate论坛
  • JAG
  • Java开源大全
  • Java视线论坛
  • jBPM工作流
  • JSFTutorials
  • Nereide ERP
  • Ofbiz ERP
  • Opentaps ERP
  • operamasks
  • Petstore
  • Prototype.js
  • RIFE
  • Runa
  • SpringSide
  • Struts Menu
  • Sun Glassfish
  • Trails
  • YUI4JSF
  • 满江红

Mobile

  • Sencha

WEB资源

  • DHTML中心
  • DHTML参考手册
  • DHTML文档
  • EclipsePlugin
  • Firebug
  • GRO Clinux
  • jMaki
  • JSTL文档
  • LoadIcon
  • Openlaszlo
  • Struts Menu 展示
  • Web Test Tools
  • WebCtrs
  • Webdeveloper
  • 中国RIA开发者论坛

Workflow

  • E-Workflow
  • JBPM
  • OpenWFE
  • OSWorkflow
  • WFMC
  • Workflow Research

其他连接

  • confach
  • CPP
  • ejay
  • Giovanni
  • 丹佛
  • 交大e-learning
  • 交大研究生院
  • 可恶的猫
  • 天天@blog
  • 我的相册
  • 阿飞

大牛人

  • 32篇JBPM
  • David.Turing
  • HongSoft@业务集成
  • Joel
  • Koen Aers
  • Martinfowler
  • Raible Matt
  • Raible Wiki
  • Scott W.Ambler
  • Tom Baeyens
  • Uncle Bob
  • 一个世界在等待
  • 子在川上曰
  • 小布老师
  • 小明
  • 差沙
  • 徐昊
  • 江南白衣
  • 汪博士
  • 汪小金
  • 银狐999

开源软件

  • 2Bizbox ERP
  • CompiereCRM&ERP
  • EGW
  • Vtiger CRM
  • webERP

敏捷

  • Canoo
  • Cruisecontrol
  • DBUnit
  • EL4Ant
  • Extreme Programming
  • Fit
  • Fitnesse
  • JFrog
  • Liquibase
  • Maven
  • MockObjects
  • Selenium
  • Squish
  • xpairtise
  • XPlanner
  • XProgramming
  • 敏捷联盟

数据库

  • Oracle 中国
  • Oracle-ERP
  • Oracle在线社区

未归类

  • Aquarius Orm Studio
  • mambo建站系统
  • Oracle产品下载
  • 远程同步管理工具Capivara

经典框架

  • Apache Shale
  • formdef-struts
  • FreeMarker 主页
  • JBoss Seam
  • JSF 中心
  • JSF 入门应用
  • JSF中国
  • MyFaces官方
  • Spring 社区
  • Spring专业网站
  • Spring中文论坛
  • Spring参考手册
  • Spring官方网站
  • strecks-struts
  • Struts1
  • Struts2
  • Struts-layout
  • StrutsWiKi
  • Tapestry WIKI
  • Tapestry 官方
  • Tapestry4开发指南
  • Tapestry中文文档
  • Webwork2文档
  • Wicket

网络教程

  • Laliluna
  • RoseIndia
  • Sang Shin
  • Visualbuilder

著名站点

  • Buildix
  • Dev2Dev
  • IBM dev中国
  • InfoQ
  • ITPub
  • Java Eye
  • Java Research
  • JavaRead
  • JavaWorldTW
  • Matrix
  • PHP100
  • PHPX
  • SpringSideWiKi
  • TheServerSide
  • TWPHP
  • 中国工作流论坛

项目管理

  • 管理人网

最新评论

View Post

我对C#中事件的理解

事件(Event)
C#中的事件处理实际上是一种具有特殊签名的delegate,一般象下面这个样子:
public delegate void MyEventHandler(object sender, MyEventArgs e);
其中的两个参数,sender代表事件发送者,e是事件参数类。MyEventArgs类用来包含与事件相关的数据,所有的事件参数类都必须从System.EventArgs类派生。当然,如果你的事件不含参数,那么可以直接用System.EventArgs类作为参数,或者可以不使用参数。
我们可以将自定义事件的实现归结为以下几步:
step1.定义delegate对象类型,它有两个参数,第一个参数是事件发送者对象,第二个参数是事件参数类对象。
step2.定义事件参数类,此类应当从System.EventArgs类派生。如果事件不带参数,这一步可以省略。
step3.用event关键字定义事件对象,它同时也是一个delegate对象。
step4.在需要触发事件的地方用调用delegate的方式写事件触发方法。(delegate一般被封装在一个方法内,与属性操作类似)
step5.用+=操作符添加事件到事件队列中(-=操作符能够将事件从队列中删除)。
step6.定义事件处理方法,它应当与delegate对象具有相同的参数和返回值类型。
简单的例子如下:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

namespace myApp
{
    
/**//// <summary>
    
/// Form5 的摘要说明。
    
/// </summary>

    public class Form5 : System.Windows.Forms.Form
    
{
        
private System.Windows.Forms.Button button1;
        
/**//// <summary>
        
/// 必需的设计器变量。
        
/// </summary>

        private System.ComponentModel.Container components = null;

        
public Form5()
        
{
            
//
            
// Windows 窗体设计器支持所必需的
            
//
            InitializeComponent();

            
//
            
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
            
//
        }


        
/**//// <summary>
        
/// 清理所有正在使用的资源。
        
/// </summary>

        protected override void Dispose( bool disposing )
        
{
            
if( disposing )
            
{
                
if(components != null)
                
{
                    components.Dispose();
                }

            }

            
base.Dispose( disposing );
        }


        
Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码
        
/**//// <summary>
        
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
        
/// 此方法的内容。
        
/// </summary>

        private void InitializeComponent()
        
{
            
this.button1 = new System.Windows.Forms.Button();
            
this.SuspendLayout();
            
// 
            
// button1
            
// 
            this.button1.Location = new System.Drawing.Point(80, 64);
            
this.button1.Name = "button1";
            
this.button1.TabIndex = 0;
            
this.button1.Text = "button1";
            
this.button1.Click += new System.EventHandler(this.button1_Click);
            
// 
            
// Form5
            
// 
            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
            
this.ClientSize = new System.Drawing.Size(292, 273);
            
this.Controls.Add(this.button1);
            
this.Name = "Form5";
            
this.Text = "Form5";
            
this.Load += new System.EventHandler(this.Form5_Load);
            
this.ResumeLayout(false);

        }

        
#endregion


        
private shape trigon=new shape();

        
private void button1_Click(object sender, System.EventArgs e)
        
{
            
this.trigon.ColorValue=1;
        }


        
private void Form5_Load(object sender, System.EventArgs e)
        
{
            
//步骤5 用+=操作符添加事件到事件队列中
            this.trigon.ColorChange +=new ColorChangeEvent(trigon_ColorChange);  //把事件内容加入事件队列
        }


        
//步骤6 定义事件处理方法
        private void trigon_ColorChange(object sender,MyEventArgs e)//事件内容
        {
            MessageBox.Show(
"Class: " + sender.ToString()+ "\nClass(x,y): ("+ e.X +","+ e.Y+")" );
        }

    }



    
//步骤1 定义Delegate
    public delegate void ColorChangeEvent(object sender,MyEventArgs e);

    
//步骤2 定义参数类
    public class MyEventArgs : EventArgs
    
{
        
private int _x;
        
private int _y;

        
public MyEventArgs(int x, int y)
        
{
            _x 
= x;
            _x 
= y;
        }


        
public int X{get{return _x;}}
        
public int Y{get{return _y;}}
    }


    
public class shape
    
{
        
private int cvalue;   //成员变量
        private int x;
        
private int y;
        
private MyEventArgs myEventArgs;

        
//步骤3 用event定义一个Delegate对象
        public event ColorChangeEvent ColorChange;  //注意public

        
public int ColorValue
        
{
            
get{return cvalue;}
            
set
            
{
                cvalue
=value; 
                
//步骤4 触发事件
                ColorChange(this,myEventArgs);
            }
  
        }

        
        
public shape()
        
{
            cvalue
=0;
            x
=0;
            y
=0;
            myEventArgs
=new MyEventArgs(x,y);
        }

        
    }

}

posted on 2005-09-20 15:03 MingIsMe 阅读(209) 评论(0)  编辑  收藏 所属分类: 05 微软编程

 
Powered by:
BlogJava
Copyright © MingIsMe