对于.net中页面事件,就拿Load来说:
private void Form1_Load(object sender, System.EventArgs e)
{
   //.........
}
InitializeComponent 方法中自动生成:
this.Load += new System.EventHandler(this.Form1_Load);
--------------
那么,根据委托和事件的定义。我的问题是
要运行事件应该有以下两句:
1、应该有private event EventHandler this.Load;//需要定义委托。可我没有看到系统在哪里有这个语句
2、需要先调用this.Load(object sender, System.EventArgs e)这个事件,然后才会运行方法Form1_Load()。//也没找到在哪里调用的这个事件。
那么在asp.net或winform页面中的事件怎么个编写和运行过程??以上两句又是怎么实现的?

解决方案 »

  1.   

    这两句可以找到,你试着把private void Form1_Load(object sender, System.EventArgs e) 
    随便改一下,按F5就会跳到那里.
      

  2.   

    解答如下:1>你的页面类继承自Page,Page继承自TemplateControl,TemplateControl继承自Control
      在Control中定义了Load事件。可以反编译看到。
       [WebSysDescription("Control_OnLoad")]
        public event EventHandler Load
        {
            add
            {
                this.Events.AddHandler(EventLoad, value);
            }
            remove
            {
                this.Events.RemoveHandler(EventLoad, value);
            }
        }2>当你的页面展示的时候会触发该事件,从而调用相应函数。
    可以参考MSDN中讲到的ASP.Net页面模型。
    同时可以参考这里来查看页面类的生命周期。
    http://blog.csdn.net/Haoze/archive/2008/04/25/2325574.aspx
      

  3.   

    上面的地址左边是page的生命周期用小写字母表示的。
    右边的是上面控件的生命周期,是大写字母表示的。
      

  4.   

    1>你的页面类继承自Page,Page继承自TemplateControl,TemplateControl继承自Control 
      在Control中定义了Load事件。可以反编译看到。 
     [WebSysDescription("Control_OnLoad")]
        public event EventHandler Load
        {
            add
            {
                this.Events.AddHandler(EventLoad, value);
            }
            remove
            {
                this.Events.RemoveHandler(EventLoad, value);
            }
        }-------------------
    请问用的什么反编译软件????
    我用的ildasm好像没那么强大。
      

  5.   

    看到前台页面的<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
    使用Asp.NET时,新建的aspx页面第一行page指令中包含了一个AutoEventWireup属性,这一属性决定了当前页是否自动关联某些特殊事件。 
         首先,从浏览器页面触发的事件不能立刻在本地得到处理,而是POST至服务器上,因此,Asp.NET建立了委托(代理)机制。在建立一个事件的同时,建立相应的委托:private void InitializeComponent()
       {    
        this.mybutton.Click += new System.EventHandler(this.Button1_Click);//委托
       }private void Button1_Click(object sender, System.EventArgs e)
       {
        //事件内容
       }     委托将事件与该页面显式关联。在AutoEventWireup="false"时,如果没有委托,事件将不执行。     这与早期VB采用的隐式事件挂起截然不同,各有利弊。但,Asp.NET中可以修改AutoEventWireup="true",使页面与某些特殊的事件方法绑定,自动识别这些具有特定名称的事件,而不需要进行委托。这些特定名称包括:Page_Init, Page_Load, Page_DataBind, Page_PreRender和Page_Unload等。比如:private void Page_Load(object sender, System.EventArgs e)
       {
        // 事件内容
       }
      

  6.   

    查了下msdn:
    PagesSection.AutoEventWireup 属性:
    获取或设置一个值,该值指示 ASP.NET 页的事件是否自动连接到事件处理函数。
    C#
    public bool AutoEventWireup { get; set; }AutoEventWireup 为 true 时,ASP.NET 不要求事件指定事件处理程序(如 Page_Load 或 Page_Init)。这意味着在 Web 窗体页的服务器脚本中不需要 Visual Basic 中的 Handles 关键字。 默认情况下,当在 Visual Studio 中创建 ASP.NET Web 应用程序时,.aspx 页或 .ascx 控件中的 AutoEventWireup 属性值设置为 false,不自动创建事件处理程序。如果主要考虑性能,则不要将 AutoEventWireup 设置为 true。