在windows 编程顶用到最多的就是控件的事件了,微软给我们很好的方法,把注意力放到事件执行要领的设计和编码上,但是但我们真正弄懂了事件的真正出发执行道理的话,对我们的编程的提高真长短常榜的,例如在windows编程中 如果我单击了一个button按钮触发了button 的click事件 Button1_Click(){} ,但是有时候我们编程的时候,不单想要触发button 的单击事件,我还想要把其他的时间也要挪用下来挨次执行,要实现这种方法,,除了在要领最后对其他要领的挪用,还可以操作将其他需要挨次执行的要领封装到button的click 事件的委托东西中,这样就能够挨次执行毁失要领列表中的措施了,而这种方法的实现是以清楚事件触发和委托的挪用为前提的。
事件是类和东西向外界发出的动静,事件的执行是通过事件委托的方法,挪用我们所筹备好的措置惩罚惩罚要领,而是先动静的响应的。要响应某些事件并针对某些事件执行我们意定的要领,需要做到以下几步:
1、声明事件委托。
2、声明事件。
3、添加事件的触发要领。
4、添加事件的措置惩罚惩罚措施(响应事件的要领)。
5、将指定的事件措置惩罚惩罚措施邦定到要措置惩罚惩罚的事件上(订阅事件)。
6、用户信息操纵,并触发事件(挪用事件的触发要领)。
7、通过事件委托的回调,执行我们需要的事件措置惩罚惩罚措施。
下面我们举一个简单的自界说事件措置惩罚惩罚措施的例子(控制台措施)
代码如下:
namespace 事件
{
//颁布事件的类
public class TestEventSource
{
//界说事件参数类
public class TestEventArgs : EventArgs
{
public readonly char KeyToRaiseEvent;
public TestEventArgs(char keyToRaiseEvent)
{
KeyToRaiseEvent = keyToRaiseEvent;
}
}
//界说delegate
public delegate void TestEventHandler(object sender, TestEventArgs e);
//用event 关键字声明事件东西
public event TestEventHandler TestEvent;
//事件触发要领
protected virtual void OnTestEvent(TestEventArgs e)
{
if (TestEvent != null)
TestEvent(this, e);
}
//引发事件
public void RaiseEvent(char keyToRaiseEvent)
{
TestEventArgs e = new TestEventArgs(keyToRaiseEvent);
OnTestEvent(e);
}
}
//监听事件的类
public class TestEventListener
{
//界说措置惩罚惩罚事件的要领,他与声明事件的delegate具有不异的参数和返回值类型
public void KeyPressed(object sender, TestEventSource.TestEventArgs e)
{
Console.WriteLine(“发送者:{0},所按得健为:{1}”, sender, e.KeyToRaiseEvent);
}
//订阅事件
public void Subscribe(TestEventSource evenSource)
{
evenSource.TestEvent += new TestEventSource.TestEventHandler(KeyPressed);
}
//打消订阅事件
public void UnSubscribe(TestEventSource evenSource)
{
evenSource.TestEvent -= new TestEventSource.TestEventHandler(KeyPressed);
}
}
//测试类
public class Test
{
public static void Main()
{
//创建事件源东西
TestEventSource es = new TestEventSource();
//创建监听东西
TestEventListener el = new TestEventListener();
//订阅事件
Console.WriteLine(“订阅事件\n”);
el.Subscribe(es);
//引发事件
Console.WriteLine(“输入一个字符,再按enter键”);
string s = Console.ReadLine();
es.RaiseEvent(s.ToCharArray()[0]);
//打消订阅事件
Console.WriteLine(“\n打消订阅事件\n”);
el.UnSubscribe(es);
//引发事件
Console.WriteLine(“输入一个字符,再按enter健”);
s = Console.ReadLine();
es.RaiseEvent(s.ToCharArray()[0]);