C#窗口事件处理初探

原创 2003年06月02日 17:49:00

C#窗口事件处理初探

 

事件驱动(Event Driven)是C#窗口程序设计的核心,其重要性就相当于VC中的消息映射,不了解事件驱动就无法深入窗口程序设计的殿堂。在C#语言中,事件的处理主要有两种方法:委托式的事件处理模式(Delegation Event Model)与对可重载方法(Event Method)的重载。

1、委托式事件处理

       委托式事件处理模式,顾名思义,就是将特定的事件委托给负责事件处理的方法来进行。

       .NET中,类有数据成员(Data Member)与函数成员(Function Member)。此外还有 “事件成员(Event Member)”,来进行事件驱动的处理。

       事件成员就是那些与该类的对象相关的事件。它定义了在一个对象中会有哪些相关的事件发生。不同的类可以有不同的事件成员。

       事件处理可通过委托关系来进行。委托关系可以这样来建立:

       object.Event+=new EventHandle(Method);

       其含义是:如果对象object发生了Event事件,就交由方法Method来处理。一个对象可以委托多个不同的处理,“+=”用来增加新的委托关系。Method是真正进行事件处理的地方,格式为:

       public void Method(object sender,EventArgs e);

       EventArgs.NET Framework中有关事件的基础类,所有发生的事件都被包装成EventArgs类或其子类的对象。当事件发生时,Method会收到这两个参数。一旦建立了委托关系,系统自动在特定事件发生时,转而执行您所委托的事件处理方法。

下面举一个简单的例子,运行时首先产生一个窗口,当点击窗口上的按钮时,程序结束。代码如下:

using System;

using System.Windows.Forms;

 

class Form1:Form

{

     public static void Main()

     {

         Application.Run(new Form1());

     }

    

     public Form1():base()

     {

         Text="事件处理示例";

         Button button1=new Button();

         button1.Text="点击";

         //将button1的Click事件委托给countClick方法

         button1.Click+=new EventHandler(this.countClick);

         //将button1加到窗口中。

         Controls.Add(button1);

     }

 

     public void countClick(object sender,EventArgs e)

     {

         Application.Exit();

     }

}

2、重载事件方法

       C#中,针对不同类所相关的事件,除了定义有事件成员外,也定义了可重载的事件方法,可通过重载这些事件方法来设计你所希望的对应事件处理。这些可重载的事件方法名称皆以“On”开头,且被声明为“virtual”,一个被声明成virtual的方法,就代表它可被重载,被声明成override的方法也代表它可被重载,如果声明成abstract则必须被重载。例如按钮的Click事件,就有一个对应的可重载的OnClick事件方法。

       仍然以上面的例子来说,代码如下:

using System;

using System.Windows.Forms;

 

class Button1:Button

{

     public static void Main()

     {

         Form form1=new Form();

         form1.Text="事件处理示例";

         Button1 button1=new Button1();

         button1.Text="点击";

         form1.Controls.Add(button1);

         Application.Run(form1);

     }

 

     protected override void OnClick(EventArgs e)

     {

         Application.Exit();

     }

}

     通过以上的例子看出,在C#中进行事件处理是相当简便的。

C# 非顶端窗口截图 - 用于查找指定窗口并截图

panel上可以通过DrawToBitmap截图,不管是否在屏幕外是否有遮挡           Bitmap sourceBitmap = new Bitmap(400, 300);       ...
  • u013096568
  • u013096568
  • 2016年11月29日 21:15
  • 1985

C# 调试方法之即时窗口输出

1,非中断模式下的调试。 利用系统“输出”窗口。(视图-输出)来打印调试信息。有Debug和Release两种版本,通过运行按钮右边的选项可以选择程序的运行方式。而对应的现实调试信息的方法也不同...
  • CNHK1225
  • CNHK1225
  • 2015年05月15日 17:12
  • 7053

c# 获取当前活动窗口句柄,获取窗口大小及位置

需调用API函数 需在开头引入命名空间 using System.Runtime.InteropServices; 获取当前窗口句柄:GetForegroundWindow() [DllI...
  • pangwenquan5
  • pangwenquan5
  • 2014年10月20日 21:09
  • 17372

C#窗口间传递消息

http://blog.csdn.net/chenyuling/archive/2007/05/25/1625907.aspx 我用的方法是:见下面我在白云的帖子 发信人: CCBB (超超饱饱|酒...
  • hemeinvyiqiluoben
  • hemeinvyiqiluoben
  • 2014年12月04日 13:36
  • 887

C# 窗口和控件的操作

一。 窗口和窗口之间传值 1第一种方法用静态变量 在form1里定义 public static string  passvalue;在form2里赋值; 2第二种方法用new的参数 定义form2时...
  • gaiazhang
  • gaiazhang
  • 2016年09月02日 16:52
  • 741

利用DockPanel与C#制作窗体浮动和停靠(vs2010)

利用DockPanel与C#制作窗体浮动和停靠(vs2010) 点击功能窗  然后鼠标拖动form2的效果图如下: 1。下载的DockPanel。 在SF上能下到最新的版本的DLL和演示。 解压文件...
  • jun502525164
  • jun502525164
  • 2013年06月12日 16:04
  • 20330

C#获取窗口句柄概念和方法实例

在Windows中,句柄是一个系统内部数据结构的引用。例如当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口的句柄,系统会通知你:你正在操作142号窗口,就此你的应用程序就能要求系统...
  • cuoban
  • cuoban
  • 2016年02月21日 00:30
  • 5419

C# 窗体可停靠

一、做一个窗口可停靠小例子,利用第三控件来做啊 。先从网上下载一个WeifenLuo.WinFormsUI.Docking.dll在解压到文件啊添加工具箱来。 下载地址:http://sourcef...
  • wywywywywywy123456
  • wywywywywywy123456
  • 2015年12月18日 20:52
  • 1827

C# WinForm 进度条可复用窗口设计

相信很多工作之后经常需要做进度条,尤其是客户端程序上传文件或者执行某些任务的时候,有进度条会让界面友好很多。最近也是蛋疼到不行,新接手的项目里一会要执行单个任务的,一会要执行多个任务的,所以进度条的个...
  • iHuahua
  • iHuahua
  • 2014年03月22日 03:04
  • 1873

收集的部分C#中窗口句柄及操作

 声明:引用的API函数一定要放在窗体里面!!! 1. c#里FindWindow的用法 FindWindow()函数的用法。要在C#里使用该API,...
  • wangmj518
  • wangmj518
  • 2014年11月18日 22:28
  • 2425
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#窗口事件处理初探
举报原因:
原因补充:

(最多只允许输入30个字)