using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace MyEvent
{
public partial class Form1 : Form
{
//创建一个委托
public delegate void ActionEventHandler(object sender, ActionCancelEventArgs ev);
public static event ActionEventHandler Action;//定义事件
public Form1()
{
InitializeComponent();
//把两个button点击事件用同一个方法处理
button1.Click += new EventHandler(Button_Click);
button2.Click += new EventHandler(Button_Click);
}
void Button_Click(object sender, EventArgs e)
{
Button bt = (Button)sender;
label1.Text = "你现在点击的按钮是:"+bt.Text.ToString();
}
public class ActionCancelEventArgs : System.ComponentModel.CancelEventArgs
{
string message = String.Empty;
public ActionCancelEventArgs() : base() { }
public ActionCancelEventArgs(bool cancel) : base(cancel) { }
public ActionCancelEventArgs(bool cancel, string message)
: base(cancel)
{
this.message = message;
}
public string Message
{
get { return message; }
set { message = value; }
}
}
protected void OnAction(object sender, ActionCancelEventArgs ev)
{
if (Action != null)
{
Action(sender, ev);//这里注意这一句,这就是触发事件的语句,并将事件交由Action委托来处理
//(就是在BusEntity中的Form1_Action方法)
}
}
private void buttonRaise_Click(object sender, EventArgs e)
{
ActionCancelEventArgs cancelEvent = new ActionCancelEventArgs();
BusEntity busentity=new BusEntity();
OnAction(this, cancelEvent);
if (cancelEvent.Cancel)
{
labelinfo.Text = cancelEvent.Message;
}
else {
labelinfo.Text = busentity.TimeString;
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MyEvent
{
public class BusEntity
{
public string time = String.Empty;
public BusEntity()
{
//产生一个委托实例并添加到Form1产生的事件列表中
Form1.Action += new Form1.ActionEventHandler(Form1_Action);
}
//事件处理程序
void Form1_Action(object sender, Form1.ActionCancelEventArgs ev)
{
ev.Cancel = !DoAction();
if (ev.Cancel)
{
ev.Message = "现在的时间秒数大于30。";
}
}
private bool DoAction()
{
bool retVal = false;
DateTime tm = DateTime.Now;
if (tm.Second < 30)
{
time = "现在的时间是:" + DateTime.Now.ToLongTimeString();
retVal = true;
}
else
{
time = "";
}
return retVal;
}
public string TimeString
{
get { return time; }
}
}
}
C#中使用事件需要的步骤:
1.创建一个委托
2.将创建的委托与特定事件关联(.Net类库中的很多事件都是已经定制好的,所以他们也就有相应的一个委托,在编写关联事件处理程序--也就是当有事件发生时我们要执行的方法的时候我们需要和这个委托有相同的签名)
3.编写事件处理程序
4.利用编写的事件处理程序生成一个委托实例
5.把这个委托实例添加到产生事件对象的事件列表中去,这个过程又叫订阅事件
分享到:
相关推荐
C# XML解析方式
C# 动态解析 javascript 脚本引擎源码
与此相关的项目定义了用来读取和解析PDF文件的C#类. 为了测试这些类,附带的测试程序PdfFileAnalyzer让你可以去读取一个PDF文件,分析它并展示和保存结果. 程序将PDF文件分割成单独每页的描述,字体,图片和其它...
c# json 解析+C# newtonsoft.json.dll 解析类库文件。
用于DBC文件的解析,将DBC文件的各个节点、信号解析出来。
C# Pacp解析dll
c#语法解析和设计模式 c#语法解析和设计模式 c#语法解析和设计模式
C#对多级json解析,非常实用,此代码写在load事件里面,然后可以了解解析json的原理。尤其是多级解析。
c#如何解析Json 2种模式解析各种复杂的JSON格式
2018最新的C#解析CAD的DXF格式文件,内容齐全,可读可写
使用C#解析JS脚本,可以获取参数和函数名,并且进行调用执行
.net C# Cron表达式解析..可以解析Cron表达式,有例子也有实现,希望能帮助到需要的人,
C# 解析json格式数据为IList<T>
一个C#实现的简单表达式解析器,支持算符优先级、括号以及函数。 修正前一个上传版本存在的问题:算符优先级的错误。
用c#解析DXF的类库,亲测可行!用c#解析DXF的类库,亲测可行!用c#解析DXF的类库,亲测可行!用c#解析DXF的类库,亲测可行!用c#解析DXF的类库,亲测可行!用c#解析DXF的类库,亲测可行!用c#解析DXF的类库,亲测...
HtmlAgilityPack 解析html,很方便很强大。
C#中Json 解析类库,C# 解析json 时,通常使用的是强类型对象反序列化,但是有时候不知道具体的对象时,使用该类库,使用dictionary 解析弱类型数据
一个用C#编写的HL7消息的类库,可以申请对象调用其中的函数进行HL7消息解析。