校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > ASP.NET中實現定制自己的委托和事件參數類

ASP.NET中實現定制自己的委托和事件參數類

熱門標簽:電銷語音機器人型號參數 浦發電話機器人提醒還款 騰訊地圖標注手機 百度地圖怎樣做地圖標注 征途美甲店地圖標注 太原400電話上門辦理 昆明語音電銷機器人價格 400電話如何申請取消 柳州電銷機器人公司

本文實例講述了ASP.NET中實現定制自己的委托和事件參數類的方法,對于學習ASP.NET有很好的參考借鑒價值。具體方法如下:

一般在實際開發中,對于事件不需要傳遞數據信息時,像上面的KingTextBox控件的事件,在引發事件時傳遞的參數為EventArgs.Empty,如下所示:

OnTextChanged(EventArgs.Empty);

這是因為控件KingTextBox的TextChanged事件比較簡單,這里不需要參數對象傳遞數據。但像一些復雜的控件比如GridView的按鈕命令事件,必須得有參數命令表示單擊了哪個按鈕;翻頁事件,需要EventArgs參數對象把當前頁信息傳遞到頁面后臺代碼的事件體的第二個參數中,然后開發人員根據此頁參數從數據庫取得對應頁的數據;還有像ItemDataBound事件,也需要把當前Row信息和索引等數據作為EventArgs參數傳遞到事件實例中。

當遇到以上這些情況,我們就需要定義自己的事件參數類和委托,而不使用默認的System.EventArgs類。下面就以Grid控件的翻頁功能說明一下定義事件參數類和委托的方法,請看以下代碼:

/// summary>
/// 
/// /summary>
public delegate void GridPageChangedEventHandler(object source, GridPage ChangedEventArgs e);
public class GridPageChangedEventArgs : System.EventArgs
{
  public GridPageChangedEventArgs()
  {
  }

  private int intCurrentPageIndex;
  public new int CurrentPageIndex
  {
    get { return intCurrentPageIndex; }
    set { intCurrentPageIndex = value; }
  }

  private int intPageCount;
  public new int PageCount
  {
    get { return intPageCount; }
    set { intPageCount = value; }
  }

  private int intPageSize;
  public new int PageSize
  {
    get { return intPageSize; }
    set { intPageSize = value; }
  }
}

以上代碼定義了一個存儲翻頁相關信息的參數類,此參數類派生于System.EventArgs類,在這里系統不強制要求一定繼承于該類,不繼承它也是可以的,但繼承于該類有一點好處。先看一下System.EventArgs基類的代碼:

/// summary>
/// 
/// /summary>
public class EventArgs
{
  //表示沒有事件數據的事件
  public static readonly EventArgs Empty;
  //初始化 System.EventArgs 類的新實例
  public EventArgs();
}

EventArgs中除了一個構造方法外,還有一個它本身類型的Empty屬性,從這里可以知道前面在調用時通過OnTextChanged(EventArgs.Empty);格式,把EventArgs.Empty作為空參數傳入事件引發方法時的用途了。這里要說明的是如果我們的GridPageChangedEventArgs類是從EventArgs繼承而來,則不但可以傳遞GridPageChangedEventArgs類對象,而且可以使用GridPageChangedEventArgs.Empty的形式傳遞空參數對象。

在GridPageChangedEventArgs方法體中定義了一些屬性;分別表示當前頁(CurrentPageIndex)、頁總數(PageCount)和頁尺寸(PageSize)。這些都是我們自定義的頁信息數據。

代碼中的這句:

public delegate void GridPageChangedEventHandler(object source, GridPage ChangedEventArgs e);

定義了一個委托GridPageChangedEventHandler。該委托可以指定這樣的一個事件方法:第一個參數為object類型,第二個參數即為上面我們定義的頁參數類對象GridPageChanged EventArgs。在注冊事件時,該委托可以保證在頁面后面代碼中自動產生的事件體的兩個參數類型與自己的兩個參數類型一致。下面是在頁面中注冊的事件后臺代碼:

protected void Grid1_PageIndexChanged(object source,GridPageChangedEventArgs e)
{
  int intCurrentPageIndex = e.CurrentPageIndex;
  int intPageSize = e.PageSize;
  //獲取數據邏輯
}

可以看到第二個參數類型即我們定義的GridDocPageChangedEventArgs類型,在事件方法體中,可以直接通過e.CurrentPageIndex和e.PageSize獲取數據,這種應用就比較多了。
現在頁參數對象和委托定義好了,下面說一下在主控件內部是如何應用它們的。聲明事件代碼如下:

/// summary>
/// 
/// /summary>
private new static readonly object EventPageIndexChanged = new object();
[Category("Action"), Description("翻頁事件")]
public event GridPageChangedEventHandler PageIndexChanged
{
  add
  {
    base.Events.AddHandler(Grid.EventPageIndexChanged, value);
  }
  remove
  {
    base.Events.RemoveHandler(Grid.EventPageIndexChanged, value);
  }
}

這里繼續采用高效率事件集合列表對象base.Events,事件的名稱為PageIndexChanged,委托類型為之前我們定義的委托類型GridPageChangedEventHandler。
引發事件的核心代碼如下:

/// summary>
/// 
/// /summary>
protected override bool OnBubbleEvent(object source, EventArgs e)
{
  bool handled = false;
  if (e is GridCommandEventArgs)
  {
    if ((((GridCommandEventArgs)(e)).CommandSource) is LinkButton)
    {
      LinkButton lb=((LinkButton)(((GridCommandEventArgs)(e)). Command Source));
      if (lb.CommandName == "Page")
      {
        if (lb.CommandArgument == "ButtonFirst")
        {
          GridPageChangedEventArgs ee = new GridPageChangedEventArgs();
          if (this.CurrentPageIndex != 0)
          {
            this.CurrentPageIndex = 0;
            ee.CurrentPageIndex = this.CurrentPageIndex;
            ee.PageCount = this.PageCount;
            ee.PageSize = this.PageSize;
            this.OnPageIndexChanged(ee);
          }
          handled = true;
        }

        if (lb.CommandArgument == "ButtonNext")
        {
          GridPageChangedEventArgs ee = new GridPageChangedEventArgs();
          if (this.CurrentPageIndex  this.PageCount - 1)
          {
            this.CurrentPageIndex += 1;
            ee.CurrentPageIndex = this.CurrentPageIndex;
            ee.PageCount = this.PageCount;
            ee.PageSize = this.PageSize;
            this.OnPageIndexChanged(ee);
          }
          handled = true;
        }

        if (lb.CommandArgument == "ButtonPrev")
        {
          GridPageChangedEventArgs ee = new GridPageChangedEventArgs();
          if (this.CurrentPageIndex > 0)
          {
            this.CurrentPageIndex -= 1;
            ee.CurrentPageIndex = this.CurrentPageIndex;
            ee.PageCount = this.PageCount;
            ee.PageSize = this.PageSize;
            this.OnPageIndexChanged(ee);
          }
          handled = true;
        }

        if (lb.CommandArgument == "ButtonLast")
        {
          GridPageChangedEventArgs ee = new GridPageChangedEventArgs();
          if (this.CurrentPageIndex != this.PageCount - 1)
          {
            this.CurrentPageIndex = this.PageCount - 1;
            ee.CurrentPageIndex = this.CurrentPageIndex;
            ee.PageCount = this.PageCount;
            ee.PageSize = this.PageSize;
            this.OnPageIndexChanged(ee);
          }
          handled = true;
        }
      }
    }
  }
  return handled || base.OnBubbleEvent(source, e);
}

以上OnBubbleEvent方法主要應用于復合控件中,采用冒泡形式處理子控件事件,后面介紹復合控件冒泡處理事件機制時再詳細講解此方法。另外,在控件的翻頁欄中預先放置了四個翻頁功能的按鈕,分別表示“首頁”、“上一頁”、“下一頁”、“末頁”,并設置它們的屬性CommandName都為“Page”,CommandArgument分別為“ButtonFirst”,“ButtonPrev”,“ButtonNext”,“ButtonLast”。
這樣就可以根據按鈕的命令和參數確定執行什么樣的邏輯。這里僅拿按鈕“下一頁”(Command="Page"CommandArgument="ButtonNext")為例解釋一下代碼邏輯:

/// summary>
///
/// /summary>
if (lb.CommandArgument == "ButtonNext")
{
    GridPageChangedEventArgs ee = new GridPageChangedEventArgs();
    if (this.CurrentPageIndex  this.PageCount - 1)
    {
      this.CurrentPageIndex += 1;
      ee.CurrentPageIndex = this.CurrentPageIndex;
      ee.PageCount = this.PageCount;
      ee.PageSize = this.PageSize;
      this.OnPageIndexChanged(ee);
    }
    handled = true;
}

代碼中首先定義一個頁參數類對象,然后通過條件語句判斷當前是否是最后一頁,如果不是最后一頁,則從主控件上讀取當前頁信息(當前頁、頁數、頁記錄數),并賦值給GridPageChangedEventArgs對象,然后以頁參數對象作為參數調用this.OnPageIndexChanged方法引發事件。另外,注意LinkButton的CommandName和CommandArgument屬性的組合用法。
最后,看一下OnPageIndexChanged方法代碼:

/// summary>
/// /summary>
protected new void OnPageIndexChanged(GridPageChangedEventArgs e)
{
  GridPageChangedEventHandler handler1 = (GridPageChangedEventHandler)base. Events[Grid.EventPageIndexChanged];
  if (handler1 != null)
  {
    handler1(this, e);
  }
}

此方法的功能是從base.Events對象中取出以Grid.EventPageIndexChanged為Key的事件引用句柄,假如句柄不為null(開發人員注冊了翻頁事件),則引發事件方法體。
最后,說明非常重要的一點:如果自定義了事件參數類,并要求在開發人員注冊的事件體中自動顯示改變參數對象的類型,如:

protected void Grid1_PageIndexChanged(object source, GridPageChangedEventArgs e)
{
  //… … 
}

其中的第二個參數顯示為GridPageChangedEventArgs類型,而不是默認的EventArgs類型,我們也必須定義自己的委托(如本例定義了委托GridPageChangedEventHandler);而默認的委托EventHandler對應的參數類型為基類System.EventArgs,即如果這里將默認的委托EventHandler和GridPageChangedEventArgs類一起使用的話,則生成以下的代碼語句:

protected void Grid1_PageIndexChanged(object source, EventArgs e)
{
  //… … 
}

可以看出參數變為EventArgs類型了。這樣就不能利用我們自己定義的GridPage ChangedEventArgs類中的數據了。雖然可以使用(GridPageChangedEventArgs)EventArgs的方式轉換一下也可以取得GridPageChangedEventArgs對象中的數據,但據筆者了解還沒有開發人員這么用,因為沒有人知道還有個GridPageChangedEventArgs類。

本文主要講解如何定制自己的參數類和委托,并以Grid的分頁功能為例演示其在實際開發中的應用。

感興趣的讀者可以參考本文所述調試運行本文示例,相信會有新的收獲。

您可能感興趣的文章:
  • Asp.Net 不同的OnClick事件區別小結(onserverclick,onclientclick)
  • ASP.NET的事件模型(很適合學習的文章)
  • Asp.net TextBox的TextChanged事件使用介紹
  • Asp.net 圖片文件防盜鏈(尊重勞動成果)及BeginRequest事件學習
  • ASP.NET 頁面事件執行順序介紹
  • 詳解ASP.NET頁面生命周期事件
  • php 模擬 asp.net webFrom 按鈕提交事件的思路及代碼
  • asp.net錯誤處理Application_Error事件示例
  • asp.net錯誤捕獲(錯誤處理)page_error事件使用方法
  • ASP.NET頁面按鈕單擊事件失效的解決方法
  • asp.net頁面觸發事件panel滾動條高度不變的實現方法
  • asp.net在事件中啟動線程來打開一個頁面的實現方法
  • asp.net中c#自定義事件的實現方法詳解
  • ASP.NET中事件如何依次發生?

標簽:蘭州 新疆 德陽 江蘇 張家界 陽泉 白山 天門

巨人網絡通訊聲明:本文標題《ASP.NET中實現定制自己的委托和事件參數類》,本文關鍵詞  ASP.NET,中,實現,定制,自己的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《ASP.NET中實現定制自己的委托和事件參數類》相關的同類信息!
  • 本頁收集關于ASP.NET中實現定制自己的委托和事件參數類的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚洲日本在线观看| 亚洲精品中文在线| 国产精品成人在线观看| 日韩av一区二| 色先锋aa成人| 国产日韩欧美精品综合| 天堂va蜜桃一区二区三区漫画版| 国产成人免费视频网站| 91精品国产麻豆国产自产在线| **欧美大码日韩| 国产精品2024| 欧美tk—视频vk| 日本aⅴ免费视频一区二区三区| proumb性欧美在线观看| 久久亚洲精华国产精华液 | 精品国偷自产国产一区| 亚洲男人天堂av网| 不卡的av电影在线观看| 精品伦理精品一区| 蜜桃av噜噜一区| 91精品欧美一区二区三区综合在| 亚洲午夜精品在线| 91美女福利视频| 国产精品不卡在线| 成人a级免费电影| 国产婷婷色一区二区三区四区| 免费成人深夜小野草| 欧美一区二区三区公司| 日韩高清在线不卡| 777久久久精品| 午夜欧美大尺度福利影院在线看| 欧美系列一区二区| 亚洲午夜久久久| 欧美日韩精品一区二区三区蜜桃 | 成人一道本在线| 亚洲国产精品影院| 国产成人精品综合在线观看| 久久众筹精品私拍模特| 欧美a级一区二区| 欧美va亚洲va香蕉在线| 久久99精品国产91久久来源| 欧美精品一区二区久久久| 精品一区二区三区在线播放视频| 欧美大片拔萝卜| 国产一区二区中文字幕| 国产日产欧美精品一区二区三区| 国产xxx精品视频大全| 成人免费一区二区三区视频| 91福利视频网站| 日韩一区精品视频| 精品久久久久久久久久久久久久久| 国产美女主播视频一区| **性色生活片久久毛片| 欧美一级欧美三级| 精品电影一区二区| 欧美一区二区三区人| 九九视频精品免费| 国产欧美精品一区二区三区四区| 91在线视频网址| 亚洲国产你懂的| 精品毛片乱码1区2区3区| 国产精品伊人色| 一区二区视频在线| 69精品人人人人| 国产美女av一区二区三区| 中文字幕久久午夜不卡| 久久这里都是精品| 久久久精品欧美丰满| 亚洲国产美国国产综合一区二区| 国内外精品视频| 欧美色图12p| 国产亚洲精久久久久久| 国产一区二区美女| 韩日欧美一区二区三区| 亚洲一区视频在线观看视频| 欧美激情在线观看视频免费| 国产精品毛片a∨一区二区三区| 婷婷六月综合亚洲| 成人高清视频免费观看| 日韩欧美国产综合在线一区二区三区| 国产精品国产馆在线真实露脸 | av高清久久久| 91小视频免费观看| 精品久久久久久久一区二区蜜臀| 亚洲国产精品尤物yw在线观看| 成人午夜av电影| 午夜精彩视频在线观看不卡| 日本美女视频一区二区| 激情文学综合插| 91精品视频网| 日韩中文字幕一区二区三区| 久久久久国产一区二区三区四区 | 亚洲欧美在线视频观看| 51久久夜色精品国产麻豆| 成人av电影在线播放| 久久成人麻豆午夜电影| 亚洲v中文字幕| 18涩涩午夜精品.www| 久久综合久久综合久久综合| 欧美日韩卡一卡二| 91久久国产最好的精华液| 大胆欧美人体老妇| 国产精品69毛片高清亚洲| 奇米影视一区二区三区| 亚洲成av人片| 亚洲国产精品欧美一二99| 亚洲免费观看在线观看| 亚洲欧洲无码一区二区三区| 欧美精品一区二区三区久久久| 日韩一区二区三区电影 | 亚洲国产成人精品视频| 欧洲人成人精品| 亚洲日本欧美天堂| 国产亚洲女人久久久久毛片| 精品国产电影一区二区| 精品少妇一区二区三区在线播放 | 国产精品一区二区三区乱码| 久久超碰97人人做人人爱| 免费观看成人av| 老司机午夜精品| 久久国产精品色婷婷| 久久精品国产一区二区三区免费看| 日本大胆欧美人术艺术动态| 婷婷久久综合九色国产成人| 奇米色777欧美一区二区| 久久国产剧场电影| 粉嫩av亚洲一区二区图片| 懂色av噜噜一区二区三区av| 国产91精品一区二区麻豆网站| 成人av在线观| 色婷婷一区二区三区四区| 成人网在线播放| 国产91精品久久久久久久网曝门| 99久久精品情趣| 日韩国产精品久久久久久亚洲| 免费成人av在线| 极品少妇一区二区三区精品视频| 国产精品一二一区| 北条麻妃一区二区三区| 欧美色视频一区| 久久色在线观看| 综合久久久久久| 日本vs亚洲vs韩国一区三区| 国产成人精品免费视频网站| 91福利视频久久久久| 日韩欧美的一区二区| 中文字幕一区在线观看视频| 天堂va蜜桃一区二区三区漫画版 | 国产一区二区不卡在线| a美女胸又www黄视频久久| 欧美日韩国产天堂| 国产欧美一区二区精品仙草咪| 亚洲一区在线视频观看| 国产在线播放一区| 91国产视频在线观看| 91麻豆免费观看| 日韩欧美一二区| 色天天综合久久久久综合片| 欧美老肥妇做.爰bbww| 久久精品男人的天堂| 午夜视频在线观看一区二区| 国产成+人+日韩+欧美+亚洲| 欧美精品久久久久久久多人混战 | 2023国产精品自拍| 亚洲一区二区在线视频| 国产精品一线二线三线精华| 欧美色偷偷大香| 亚洲欧美怡红院| 国产精品99久| 欧美一级高清片| 亚洲一区二区三区在线看| 国产精品99久久久| 日韩欧美亚洲国产精品字幕久久久| **性色生活片久久毛片| 国产精品一区二区果冻传媒| 欧美日韩亚洲高清一区二区| 中文字幕亚洲电影| 国产精品888| 91香蕉国产在线观看软件| 国产精品久久久久久亚洲伦| 91精品国产色综合久久不卡蜜臀 | 国产精品久久久久毛片软件| 免费在线观看日韩欧美| 欧美亚洲免费在线一区| 国产精品国产三级国产三级人妇| 国产一区日韩二区欧美三区| 日韩午夜激情av| 全国精品久久少妇| 欧美日韩1区2区| 亚洲成精国产精品女| 色噜噜狠狠成人中文综合| 亚洲欧洲成人av每日更新| 成人精品视频一区二区三区尤物| 久久新电视剧免费观看| 精品一二线国产| 日韩欧美国产三级| 麻豆国产精品官网| 欧美电影精品一区二区| 免费高清在线一区| 欧美精品一区二区三区在线播放|