文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页资讯编程开发 → Visual C#事件与接口编程实例

Visual C#事件与接口编程实例

时间:2004/10/15 2:46:00来源:本站整理作者:蓝点我要评论(0)

很多初学c#的朋友对于事件与接口感到迷惑不解,不明白它们之间的关系,下面我就用实例来简单的分析讲解一下。



事件,用event修饰符来代表一个事件,我们要创建一个C#事件必须按以下顺序来扫行:

 

1,创建或标识一个代表。比如下例中的



public delegate void dele(); //声明代表,delegate 关键字通知编译器 dele 是一个委托类型

 

2,创建一个包含事件处理代表,调用事件处理代表的方法的类,如下例

 

 

public class EventClass1 : IEvents //IEvents,是下面我们要讲一接口

{

public event dele event1;//定义事件成员event1

public void FireEvent() //当事件发生时

{

event1(); //调用事件处理

}

}

 

EventClass1继承接口IEvents,以下后面的EventClass2~4,都是一样。

 

3,定义一个或多个把方法连接到事件的类

 

4,使用事件

 

4.1 定义事件响应方法,如下例中的

 

 

IEvents id1 = new EventClass1();

 

4.2 使用所定义的构造函数创建一个包含事件的对象,如下例中的

 

 

id1.event1 += new dele(EventFired1);

 

4.3 触发事件,如下例中的

 

 

id1.FireEvent();

 

下面我们来看看接口,我们必须用interface来声明一个接口。接口声明可以声明零个或多个成员。接口的成员必须是方法、属性、事件或索引器。接口不能包含常数、字段、运算符、实例构造函数、析构函数或类型,也不能包含任何种类的静态成员。

 

所有接口成员都隐式地具有 public 访问权限。接口成员声明包含任何修饰符属于编译时错误。具体地说,接口成员包含下列任何修饰符属于编译时错误:abstract、public、protected、internal、private、virtual、override 或 static。更多的信息请看msdn help://MS.VSCC/MS.MSDNVS.2052/csspec/html/vclrfcsharpspec_13_1.htm

 

在下面的例子中,我们声明IEvents接口,一个方法FireEvent和一个事件event1

 

 

public interface IEvents

{

event dele event1; //定义事件

void FireEvent();//定义接口

}

 

在后面的EventClass1~4类是继承了接口IEvent,因此在这几个类中必须实现上述一个方法和一个事件。下面的实例可以帮助大家更好的理解。

 

这是一个简单的windows Forms,包含一个textbox,几个labels和一个button,在程序启动时焦点在textbox,捕捉键盘按下事件,除方向键外,我能过接口来触事方向键按下事件。



下面的代码是一个网上常见的例程,大家可以拷贝下来,保存为.cs文件,用CSC编译就行

 

代码如下:

 

 

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

 

namespace Events_Interfaces

{

public delegate void dele();//声明代表 delegate 关键字通知编译器 dele 是一个委托类型

public interface IEvents //定义接口IEvents,包含方法FireEvent事件event1

{

event dele event1;

void FireEvent();

}

public class Form1 : System.Windows.Forms.Form

{

private System.Windows.Forms.Label label1;

private System.Windows.Forms.TextBox textBox1;

private System.Windows.Forms.Label label2;

private System.Windows.Forms.Button button1;

private System.Windows.Forms.Label label3;

 

private System.ComponentModel.Container components =null;

 

public Form1()

{

InitializeComponent();

}

 

protected override void Dispose( bool disposing )

{

if( disposing )

{

if (components != null)

{

components.Dispose();

}

}

base.Dispose( disposing );

}

 

#region Windows Form Designer generated code

 

private void InitializeComponent()

{

this.textBox1 = new System.Windows.Forms.TextBox();

this.label1 = new System.Windows.Forms.Label();

this.button1 = new System.Windows.Forms.Button();

this.label2 = new System.Windows.Forms.Label();

this.label3 = new System.Windows.Forms.Label();

this.SuspendLayout();

 

this.textBox1.Location = new System.Drawing.Point(8, 80);

this.textBox1.Name = "textBox1";

this.textBox1.Size = new System.Drawing.Size(56,23);

this.textBox1.TabIndex = 1;

this.textBox1.Text = "";

this.textBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Key_Press);

 

this.label1.Location = new System.Drawing.Point(16, 16);

this.label1.Name = "label1";

this.label1.Size = new System.Drawing.Size(256,64);

this.label1.TabIndex = 0;

this.label1.Text = "Whenever you use the arrow keys inside the text box, Corresponding events will be" +"fired to display the label appropriately. Have a try!!";

 

this.button1.Location = new System.Drawing.Point(240, 112);

this.button1.Name = "button1";

this.button1.Size = new System.Drawing.Size(48,23);

this.button1.TabIndex = 3;

this.button1.Text = "Exit";

this.button1.Click += new System.EventHandler(this.button1_Click);

//

// label2

//

this.label2.Location = new System.Drawing.Point(88, 80);

this.label2.Name = "label2";

this.label2.Size = new System.Drawing.Size(184,23);

this.label2.TabIndex = 2;

this.label2.TextAlign =System.Drawing.ContentAlignment.MiddleCenter;

//

// label3

//

this.label3.Location = new System.Drawing.Point(8, 104);

this.label3.Name = "label3";

this.label3.Size = new System.Drawing.Size(64,23);

this.label3.TabIndex = 4;

this.label3.TextAlign =System.Drawing.ContentAlignment.MiddleCenter;

//

// Form1

//

this.AutoScaleBaseSize = new System.Drawing.Size(6, 16);

this.ClientSize = new System.Drawing.Size(292,141);

this.Controls.AddRange(new System.Windows.Forms.Control[]{this.label3,this.button1,this.label2,this.textBox1,this.label1});

 

this.Font= new System.Drawing.Font("ComicSansMS",8.25F,System.Drawing.FontStyle.Regular,

System.Drawing.GraphicsUnit.Point,((System.Byte)(0)));

this.Name = "Form1";

this.Text = "Events";

this.ResumeLayout(false);

}

#endregion

 

static void Main()

{

Application.Run(new Form1());

}

 

private void Key_Press(object sender,

System.Windows.Forms.KeyEventArgs e)

{

textBox1.Text = "";

label2.Text = "";

string keyId = e.KeyCode.ToString();

switch (keyId)//判断是否按下方向键

{

case "Right":

label3.Text = "";

IEvents id1 = new EventClass1(); //实例化一个接口

id1.event1 += new dele(EventFired1);//定义EventClass1中的事件响应方法

id1.FireEvent();//调用EventClass1中的FireEvent方法,触发event1 事件,事件调用EventFired1方法

break;

case "Left":

label3.Text = "";

IEvents id2 = new EventClass2();

id2.event1 += new

dele(EventFired2);

id2.FireEvent();

break;

case "Down":

label3.Text = "";

IEvents id3 = new EventClass3();

id3.event1 += new

dele(EventFired3);

id3.FireEvent();

break;

case "Up":

label3.Text = "";

IEvents id4 = new EventClass4();

id4.event1 += new

dele(EventFired4);

id4.FireEvent();

break;

default:

label3.Text = keyId;

break;

}

}

//EventFired1方法

public void EventFired1()

{

label2.Text = "";

label2.Text = "You pressed RIGHT arrow key";

}

public void EventFired2()

{

label2.Text = "";

label2.Text = "You pressed LEFT arrow key";

}

public void EventFired3()

{

label2.Text = "";

label2.Text = "You pressed DOWN arrow key";

}

public void EventFired4()

{

label2.Text = "";

label2.Text = "You pressed UP arrow key";

}

 

private void button1_Click(object sender,

System.EventArgs e)

{

Application.Exit();

}

}

public class EventClass1 : IEvents

{

public event dele event1;

public void FireEvent()

{

event1();

}

}

public class EventClass2 : IEvents

{

public event dele event1;

public void FireEvent()

{

event1();

}

}

public class EventClass3 : IEvents

{

public event dele event1;

public void FireEvent()

{

event1();

}

}

public class EventClass4 : IEvents//EventClass1继承接口IEvents

{

public event dele event1;//定义事件成员event1

//当事件发生时

public void FireEvent()

{

event1();//调用事件处理

}

}

 

}

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 编程语言排行榜2020年android studio怎么删 eclipse怎么设置编码格式 eclipse设置编码格andriod studio如何使用真机测试 andriod sandroid studio怎么生成apk android studioandroid studio如何导入jar包 android stud

人气排行 安卓模拟器BlueStacks安装使用教程编程语言排行榜2020年9月 TIOBE编程语言排行eclipse字体大小怎么设置 eclipse字体大小plsql developer怎么连接数据库 plsql deveTomcat9.0安装教程 Tomcat9.0环境变量配置方plsql developer怎么使用 plsql developerVisual Studio 2015环境搭建教程Eclipse优化设置教程 Eclipse优化设置技巧