zoukankan      html  css  js  c++  java
  • 2.委托式的事件处理和重载式的事件处理

      阅读目录

      一:ASP.NET窗口事件处理

      二:委托式的事件处理模式

      三:重载式的事件处理模式

      一:ASP.NET窗口事件处理

      . 事件驱动是窗口程序设计的核心,不了解事件驱动就无法进入窗口程序设计的殿堂

      . Windows中的事件和ASP.NET中的事件的区别是什么?

      在Windows中我们的机器是单一的,我们的机器即是服务器也是客户端就是一台机器,在Windows中你点击了按钮就是服务器当中的按钮,所以正儿八经的就是面向事件的编程,而在ASP.NET中,你点击的是客户端的按钮,执行的确实服务器端的事件,虽然它们是服务器控件最终会在浏览器中呈现出来,所以对于一千个人,一万个人看到的是同一个控件,这么多人点击了按钮,实际上通过客户端来点击的,最后执行的是服务器端的事件,看似好像是点击服务器端的按钮,这实际上是有一个模拟的过程,是通过javascript的一个函数模拟服务器端的事件

      . 在C#主要有两种事件处理模式,无论是WindowsAPP还是ASP.NET

      -委托式的事件处理模式

      -重载式的事件处理模式

      二:委托式的事件处理模式
      . 委托式的事件处理模式,就是将特定的事件委托给负责事件处理的方法来进行
      . 在.NET中,类有数据成员(属性),函数成员(方法),事件成员(事件),事件成员就是那些与该类的对象相关的事件
      . 事件处理可以通过委托关系来进行,委托关系关系这样来建立object.Event+=new EventHandle(Method);它的含义就是如果对象object发生了Event事件,就交由方法Method来处理,一个对象可以委托多个不同的处理,“+=”用来增加新的委托关系
      . Method是真正进行事件处理的地方,格式为:public void Method(object sender, EventArgs e);object sender指是触发事件的按钮,也就是触发事件的控件,EventArgs是.NETFramework中有关事件的基础类,所有发生的事件都被包装成EventArgs类或者其子类的对象,当事件发生时,Method会收到这两个参数,一旦建立了委托关系,系统自动的会在特定事件发生时,转而执行你所委托的事件处理方法

      . 我们看看服务器端事件背后到底发生了什么

      1:Default.aspx 设计文件

      

      2:Default.aspx.cs 代码文件

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Web;
      using System.Web.UI;
      using System.Web.UI.WebControls;

      namespace ServerEvent
      {
          public partial class _Default : System.Web.UI.Page
          {
              protected void Page_Load(object sender, EventArgs e)
              {
                  this.btnTwo.Click += new EventHandler(this.btnTwo_Click);
              }

              /// <summary>
              ///  设计时添加事件,什么叫“设计时添加事件”就是我们从工具箱拖一个按钮,双击添加的一个事件
              /// </summary>
              /// <param name="sender"></param>
              /// <param name="e"></param>
              protected void btnOne_Click(object sender, EventArgs e)
              {

           //实际上是在背后生成了这样一段代码 this.btnOne.Click += new EventHandler(this.btnOne_Click);把Click事件和btnOne_Click事件处理函数关联起来了
                    Response.Write("设计时添加事件");
              }

              /// <summary>
              ///  运行时添加事件,如果你没有从工具箱拖一个按钮双击添加了一个事件,那么可以采用运行时添加事件
              /// </summary>
              /// <param name="sender"></param>
              /// <param name="e"></param>
              protected void btnTwo_Click(object sender, EventArgs e)
              {
                  Response.Write("运行时添加事件");
              }
          }
      }

      三:重载式的事件处理模式
      . 在C#中,针对不同类所相关的事件,除了定义有事件成员外,也定义了可重载的事件方法,可通过重载这些事件方法来设计你所希望的对应事件处理,说白了就是在C#中,好多类都提供了一些可以重载的事件方法,就是它已经定义好了这些事件了,只不过我们需要通过派生类中自己重新去定义一下就行了

      . 这些可重载的事件方法名称皆为“On”开头,而且被声明为“virtual”,一个被声明为“virtual”的方法就代表它可以被重载,被声明为“onverride”的方法也代表它可以被重载,如果声明为“abstract”则表示它必须被重载,例如:按钮的Click事件,就有一个对应的可重载的OnClick事件方法

      . 把按钮控件重载了,把它派生成一个类,然后把它需要的方法重载了,自定义控件的好处就是可以在好多地方使用,这就是代码的可重复性

      我们可以从”对象浏览器“来看Web服务器控件有哪些事件方法可以重载

      

      1:MyCustomButtonControl.cs ASP.NET服务器控件类

      using System;
      using System.Collections.Generic;
      using System.ComponentModel;
      using System.Linq;
      using System.Text;
      using System.Web;
      using System.Web.UI;
      using System.Web.UI.WebControls;

      namespace ServerControl
      {
          [DefaultProperty("Text")]
          [ToolboxData("<{0}:MyButton runat=server></{0}:MyButton>")]
          //“MyButton”指的是我的自定义按钮控件,从“Button”派生一个我自定义的Button
          public class MyButton : System.Web.UI.WebControls.Button
          {
              [Bindable(true)]
              [Category("Appearance")]
              [DefaultValue("")]
              [Localizable(true)]
              public new string Text
              {
                  get
                  {
                      String s = (String)ViewState["Text"];
                      return ((s == null) ? "[" + this.ID + "]" : s);
                  }

                  set
                  {
                      ViewState["Text"] = value;
                  }
              }

              protected override void OnClick(EventArgs e)
              {
                  this.Page.Response.Write("重载式的事件处理模式");
              }

              protected override void RenderContents(HtmlTextWriter output)
              {
                  output.Write(Text);
              }
          }
      }

      2:添加我们自定义的Button控件

        在工具箱选择“选择项”,然后选择我们MyCustomButtonControl.cs编译好的dll就行了

        

      3:Default.aspx 设计文件

      拖动“MyButton”到我们的页面

      

      

      

      

  • 相关阅读:
    Spring Boot 2.3.0 正式发布!
    当互联网码农遇见国企老同学
    GitHub发布重大更新,关系到所有程序员!
    开发者被要求向破解者道歉,竟揪出“阿里云假员工”,网友:这人有前科
    等了整整12年!Linux QQ 终于更新了!
    我的电脑不联网,很安全,黑客:你还有风扇呢
    grpc的简单用例 (golang实现)
    grpc的简单用例 (C++实现)
    redis键过期 (redis 2.6及以上)
    安装folly库以及folly的ConcurrentHashMap的简单使用
  • 原文地址:https://www.cnblogs.com/menglin2010/p/2390155.html
Copyright © 2011-2022 走看看