最近自学  v c#  看到“事件”这一章,书上的例子不太好懂,定义了好多类,委托。。
头都大了,请高手用自己的理解给讲解一下如何用“事件”吧,因为这部分挺重要的,最好是附带小例子,
多谢了,高分,在线等

解决方案 »

  1.   

    把"事件"理解成"消息"吧,WINDOWS里响应操作不都是靠"消息"传递的么...
      

  2.   

    定义一个button,定义一个label,点一下button,然后label出现"欢迎您的到来",就是一种事件
      

  3.   

    委托你可以按字面意思理解它,实际上它算是个用户自定义类,事件是这个类的一个实例...public delegate void Dlg(string s);//某个类中Class1:
    private Dlg m_Dlg;//某个方法中:
    if(m_Dlg!=null)
    {
        m_Dlg("abc");
    }而这个委托真正执行的方法在别的什么地方:
    c1.m_Dlg=new m_Dlg(this.Method1);-_-,估计楼主更晕了...
      

  4.   

    说个简单的例子来说明事件:
    先建一个Form,拖个Button,然后,双击Button按钮,代码如下:
      private void Button_Click(sender,e)
      {
              MessageBox.Show("你好!");
          }
    然后,运行,点击Button,则就会弹出一个“你好!”提示框,
    那么,点击Button,就是触发了它的Button_Click()事件,
    这就是事件。
      

  5.   

    建议LZ去查下MSDN,上面有详细的介绍。建议在本机子上装个!
      

  6.   

    Button就是一个类创建一个工程——〉windows——〉windows application——〉右键单击 view code//用Button类创建一个对象,也可以在控件中拖到窗体(Form1)上
    Button mybutton =new Button();
    //编译运行,能看到一个按钮
      

  7.   

    委托相对复杂一些, 他相当于C中的函数指针, 可以通过给他制定一个或者一组函数, 然后直接用: 委托名(), 就可以调用这些函数了.委托跟事件的关系也非常紧密, 这要是讲开了, 就很大篇幅了. 建议楼主去MSDN Webcast频道去看看那些教程, 很不错的.你去baidu搜一下, 一个睡前的故事: peter的故事, 非常有名, 就是讲委托的, 又叫代理.
      

  8.   

    .net开发系统中,有个属性框,点击那个闪电标志,里面全是事件。
      

  9.   

    事件基础请参见事件和事件日志 | 记录事件 | 播放事件 | 事件日志基础 | 重命名与删除事件日志 | 导入与导出事件日志 | 设置性能分析所有可以使用 Visual Studio Analyzer 完成的任务都基于识别、生成和收集应用程序事件,这些任务包括:了解应用程序结构、分析性能和隔离错误等。事件是组件间的交互或操作的通知。组件间的交互发生在 COM 对象对分布式应用程序中的另一个对象进行远程函数调用时。操作的通知生成 TransactionStart 事件。它指示事务的开始,与 TransactionCommit 事件一起使用来度量事件的持续时间。基于这两个操作的事件集合为应用程序赋予了意义,因此可以更详细地查看应用程序。每个事件都由包含该事件特定数据的一组字段构成。这些字段按照标准或自定义来分类。标准字段是预定义字段,包含由 Visual Studio Analyzer 自动填充的信息或包含默认值。标准字段对于最后的分析是必需的,它提供所收集数据的模型。标准事件的基本信息包括标识符、源和目标信息、全局会话标识和安全标识,这里所说的源和目标包括线程、进程、会话、组件和计算机。附加信息包括与相关事件(例如,带有响应的请求)关联的序列号、说明和用户字段。还有在收集事件之后添加的标准字段。这些字段包含由 Visual Studio Analyzer 计算的时间值(EventTime、ComputedEventTime 和 AbsoluteEventTime)。自定义事件字段用于将更详细和更具体的数据添加到事件。标准事件字段在下表中列出。事件字段名 说明 
    事件 事件的全局唯一标识符 (GUID)。 
    源计算机 事件原始事件源的计算机名。此参数的默认值为当前计算机名。 
    源进程 ID 事件原始事件源的进程 ID。此参数的默认值为当前进程 ID。 
    源进程 事件原始事件源的进程名称。此参数的默认值为当前进程名称。 
    源线程 事件原始事件源的线程 ID。此参数的默认值为当前线程 ID。 
    源组件 生成事件的组件的全局唯一标识符 (GUID)。此参数的默认值为当前事件源 GUID。 
    源会话 标识已生成事件的组件实例的会话标识符。此参数的默认值为当前会话标识符。 
    源句柄 生成此组件实例独有的事件的组件句柄。此参数没有默认值。 
    目标计算机 事件最终目标的计算机名。此参数的默认值为当前计算机名。 
    目标进程 ID 事件最终目标的进程 ID。此参数的默认值为当前进程 ID。 
    目标进程 事件目标的进程名称。此参数的默认值为当前进程名称。 
    目标线程 事件最终目标的线程 ID。此参数的默认值为当前线程 ID。 
    目标组件 事件最终目标的 GUID。默认值为当前事件源 GUID。  
    目标会话 事件最终目标的会话标识符。默认值为当前会话标识符。 
    目标句柄 该源实例独有的最终目标的句柄。此参数没有默认值。 
    EventTime 相对于正在收集事件的计算机的事件生成时间。 
    ComputedEventTime 生成事件的时间,但是事件源计算机时间的部分中间结果通过正在收集事件的计算机已进行调整。 
    AbsoluteEventTime 生成事件的时间,但是已转换为可以直接用于转换为字符串的 SYSTEMTIME 结构。 
    类型 正在生成的事件类型。六种事件类型分别为:出站、入站、常规、默认、已测量、开始和结束。  
    参数 函数或查询的文本的参数。此参数仅在函数或查询开始期间有意义。 
    因果性 ID 用于匹配子操作序列的值。此参数的默认值由 COM 提供。 
    相关 ID 用于调协入站和出站事件对(如调用和返回或进入和离开)的 ID。此参数没有默认值。 
    动态事件数据 表示已测量事件的值,如来自系统监视器(在 Windows 2000 以前的版本中为性能监视器)中的数据。  
    异常 来自函数或查询的任何异常信息。此参数没有默认值。 
    返回值 从函数或查询返回的值。此参数仅在函数或查询结束时有意义。 
    安全标识 正在使用的安全性上下文。此参数的默认值是已登录的用户的用户名。 Visual Studio Analyzer 可以显示进程外交互的双方,如进入函数的调用和从那个函数的返回。虽然调用函数和从函数返回都与函数有关,但它们是独立的事件;它们共同创建请求/响应对。基本上,Visual Studio Analyzer 提供收集事件的基础结构,而事件源提供那个事件的信息。例如,假定函数 A 调用函数 B。单独的 Visual Studio Analyzer 事件可以向您显示: 函数 A 何时调用函数 B。 
    函数 B 何时收到调用并开始处理。 
    函数 B 何时完成处理并将结果返回给函数 A。 
    函数 A 何时收到结果。 
    可以使用此信息测量在网络上所用的时间和实际处理所用的时间。由 Microsoft 组件生成的事件
    可以使用 Visual Studio Analyzer 捕获由多个 Microsoft 组件生成的事件。这些事件称为预定义或系统定义的事件,它们可以提供有关下列内容的信息: 特定应用程序方法的执行时间 
    度量系统环境信息,如 CPU 的使用 
    开始和完成数据库查询 
    启动和关闭组件 
    启动、提交和回滚事务 
    如果应用程序使用任何 Microsoft 提供的技术,则可以在安装 Visual Studio .NET 之后对应用程序运行 Visual Studio Analyzer。您将立即看到事件。如果这些事件不提供足够的信息,使您不能通过希望的方式分析应用程序性能,可以将应用程序注册到 Visual Studio Analyzer 并生成自己的事件。有关更多信息,请参见规范应用程序。事件源
    “事件源”是生成事件的分布式应用程序的一个组件。必须将该对象注册到 Visual Studio Analyzer 以使事件源有效。例如,John 生成具有三个 COM 组件的应用程序。这三个对象共同表示该应用程序。只要用 Visual Studio Analyzer 注册这些组件,它们就单独表示事件源。下图阐释了此方案。有关详细信息,请参见生成 Visual Studio Analyzer 事件的 Microsoft 组件。
    事件类别
    “事件类别”是对事件的分类。有预定义类别和由事件源创建的自定义类别。有两个主要的预定义事件类别: 已测量事件 
    规则事件 
    已测量事件是提供系统统计信息的周期性事件。已测量事件的一个示例是“处理器时间”,它测量运行应用程序所用的处理器时间量。规则事件是由 Microsoft 提供的多种技术生成的事件或由自己创建的事件。它们显示组件间的交互或操作的通知。事件对指示组件之间的交互:第一个指示事件开始,第二个指示事件结束。例如,如果将下表中的规则事件类型关联到前面的关系图中的每个事件源,则可以断定每个对象(COM、MTS 和 JScript)都生成一个相应的事件。因此,可以生成六个事件。事件源 事件类型 
    COM 对象 COM 客户端调用和 COM 客户端返回 
    MTS 对象 对象激活和对象停用 
    JScript 对象 ScriptGlobalStart 事件和 ScriptGlobalStop 事件 有关事件的完整列表,请参见生成 Visual Studio Analyzer 事件的 Microsoft 组件。
      

  10.   

    助你理解:
    事件,什么都不是,仅是event声明的一个“名称标识符”,会作为控件的属性一样在设计时可视化设置。事件仅有两种操作符:+=(即add)和-=(即remove)但委托(对象)是类的真实成员变量,可以绑定函数并调用。具有很多操作符,如+,-,=。C#里对事件有一个特殊处理,也是初学者最头疼的地方,在C#规范中有描述,在类中声明一个事件的同时,会隐式地声明一个匿名(可以假设为同名)委托成员变量:
    因此,下列形式的实例事件声明:
    class X {
    public event D Ev;
    }
    可以编译为如下语句:
    class X {
    private D __Ev;  // field to hold the delegate
    public event D Ev {
    add {
    lock(this) { __Ev = __Ev + value; }
    }
    remove {
    lock(this) { __Ev = __Ev - value; }
    }
    }
    }
    在类 X 中,对 Ev 的引用在编译时改为引用隐藏字段 __Ev。名称“__Ev”是任意的;隐藏字段可以具有任何名称或根本没有名称。
    所以:
    我们给一个事件绑定函数实体时,Button1.ClickedEventName += form1.Button1_Clicked;
    事实上相当于:Button1.ClickedDelagete = Button1.ClickedDelagete + new EventHandler(form1.Button1_Clicked);
      

  11.   

    我网上抄的:
    有许多人问的,.Net中的委托以及事件处理。我拿简单的例子说明一下,是现实中的例子:比如说一个公司(场景),你是老板,手下有两个员工,小张和小王。
    你命令小王,如果小张玩游戏,则小王扣去小张500元钱。这就是现实中的委托。实际上,在写程序中,程序员就是老板,小张和小王就是两个对象。小张玩游戏是一个方法,小张还有一个游戏事件,他玩游戏激发这个事件。而小王就是事件处理对象,他负责把小张的钱扣除500。所以,委托有如下几个要素:
    1 激发事件的对象--就是小张
    2 处理对象事件的对象--就是小王
    3 定义委托,就是你让小王监视小张。如果这三个要素都满足的话,则你就写出了一个完整事件的处理。下面有个例子:在vs.net2003 C#控制台应用程序编辑运行成功:
    using System;namespace CSharpConsole
    {
    public class 场景
    {
    [STAThread]
    public static void Main(string[] args)
    {
    Console.WriteLine("场景开始了....");
    // 生成小王
    小王 w = new 小王();
    // 生成小账
    小张 z = new 小张();// 指定监视
    z.PlayGame += new PlayGameHandler(w.扣钱);// 开始玩游戏
    z.玩游戏();console.writeline("场景结束...");
    Console.ReadLine();
    }
    } // 负责扣钱的人
    public class 小王
    {
    public 小王()
    {
    Console.WriteLine("生成小王...");
    }public void 扣钱(object sender,EventArgs e)
    {
    Console.WriteLine("小王:好小子,上班时间胆敢玩游戏...");
    Console.WriteLine("小王:看看你小子有多少钱...");
    小张 f = (小张)sender;
    Console.WriteLine("小张的钱: " + f.钱.ToString());
    Console.WriteLine("开始扣钱......");
    System.Threading.Thread.Sleep(500);
    f.钱 = f.钱 - 500;
    Console.WriteLine("扣完了....现在小张还剩下:" + f.钱.ToString());
    }
    }// 如果玩游戏,则引发事件
    public class 小张
    {
    // 先定义一个事件,这个事件表示“小张”在玩游戏。
    public event PlayGameHandler PlayGame;
    // 保存小张钱的变量
    private int m_Money;public 小张()
    {
    Console.WriteLine("生成小张....");
    m_Money = 1000; // 构造函数,初始化小张的钱。
    }public int 钱 // 此属性可以操作小张的钱。
    {
    get
    {
    return m_Money;
    }
    set
    {
    m_Money = value;
    }
    }public void 玩游戏()
    {
    Console.WriteLine("小张开始玩游戏了.....");
    Console.WriteLine("小张:CS好玩,哈哈哈! 我玩.....");
    System.Threading.Thread.Sleep(500);
    System.EventArgs e = new EventArgs();
    OnPlayGame(e);
    }protected virtual void OnPlayGame(EventArgs e)
    {
    if(PlayGame != null)
    {
    PlayGame(this,e);
    }
    }
    }// 定义委托处理程序
    public delegate void PlayGameHandler(object sender,System.EventArgs e);}
      

  12.   

    演示事件(Event)怎样使用以及怎样为用户控件添加一个事件(示例代码下载):
    http://blog.csdn.net/ChengKing/archive/2006/01/07/572871.aspx
      

  13.   

    daishengs(横舟摆渡) 你写的太好了!~
    完全理解了~!!谢谢~