国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

使用Visual Basic.NET重載事件處理程序

2024-07-10 13:02:00
字體:
供稿:網(wǎng)友
  • 本文來源于網(wǎng)頁設(shè)計愛好者web開發(fā)社區(qū)http://www.html.org.cn收集整理,歡迎訪問。

  • 使用 visual basic .net 重載事件處理程序
    matthew a. stoecker
    visual studio team
    microsoft corporation
    2002 年 2 月

    概要:本文介紹在 visual basic? .net 中編程時,如何重載事件處理程序。同時還討論如何使用 handles 子句。

    目錄
    簡介
    前提
    繼承的事件處理程序
    組件中繼承的事件處理程序
    總結(jié)
    簡介
    在繼承控件或組件時,將創(chuàng)建封裝基類的所有功能的新控件或新組件。基類定義的所有事件處理程序都包含在繼承的組件中。本文將分析與繼承的事件處理程序相關(guān)的問題,并具體討論如何使用 visual basic .net 開發(fā)應(yīng)用程序。

    前提
    您應(yīng)該非常了解繼承和面向?qū)ο蟮木幊獭S嘘P(guān)詳細(xì)信息,請參閱 polymorphism in components(英文)。
    繼承的事件處理程序
    在繼承某個組件時,該組件的所有成員都被并入新類中。事件處理程序是在響應(yīng)組件接收的特定事件時執(zhí)行的方法,并且它是和其他組件成員一同被繼承的。以下示例顯示了一個典型的事件處理程序:

    private sub button1_click(byval sender as system.object, byval e as _
    system.eventargs) handles button1.click
    static counter as integer = 0
    counter += 1
    messagebox.show (" 此按鈕已被單擊 " & _
    counter.tostring() & " 次。")
    end sub
    只要發(fā)生 button1.click 事件,就會執(zhí)行以上方法。方法聲明末尾的 handles 子句將方法與事件進(jìn)行關(guān)聯(lián)。這是組件中事件處理程序的典型結(jié)構(gòu)。

    為了在繼承類中重載此方法,必須添加 overridable 關(guān)鍵字,并將訪問級別更改為 protected、protected friend 或 public。以下示例顯示了一個可以被重載的事件處理程序:

    protected overridable sub button1_click(byval sender as system.object, _
    byval e as system.eventargs) handles button1.click
    static counter as integer = 0
    counter += 1
    messagebox.show (" 此按鈕已被單擊 " & _
    counter.tostring() & " 次。")
    end sub
    組件中繼承的事件處理程序
    重載繼承的事件處理程序與重載任何其他類型的繼承方法基本相同,唯一不同之處在于:在重載繼承的事件處理程序時,必須刪除 handles 子句。

    重載繼承組件中的方法

    將 overrides 關(guān)鍵字添加到方法聲明中。
    注意:不要在方法中添加 handles 子句。事件處理程序已經(jīng)與基類中的事件相關(guān)聯(lián),并且此關(guān)聯(lián)將傳遞到繼承類中。也就是說,當(dāng)引發(fā)事件時將執(zhí)行此方法,而不再需要額外的 handles 子句。
    以下示例顯示了如何重載前面示例中的事件處理程序:

    protected overrides sub button1_click(byval sender as system.object, _
    byval e as system.eventargs)
    static counter as integer = 0
    counter += 1
    messagebox.show (" 此繼承的按鈕已被單擊 " & _
    counter.tostring() & " 次。")
    end sub
    為什么不需要 handles 子句
    handles 子句不再與此方法相關(guān)聯(lián)。這并不是疏忽,而是 .net 框架處理事件的一項重要內(nèi)容。事件處理程序已經(jīng)與基類中的事件相關(guān)聯(lián),并且此關(guān)聯(lián)將傳遞到繼承類中。也就是說,當(dāng)引發(fā)事件時將執(zhí)行此方法,而不再需要額外的 handles 子句。如下所示,如果添加 handles 子句,將創(chuàng)建與事件的附加關(guān)聯(lián),這會使方法在每個事件中被執(zhí)行兩次。

    ' 不正確的代碼
    protected overrides sub button1_click(byval sender as system.object, _
    byval e as system.eventargs) handles button1.click
    static counter as integer = 0
    ' 每次單擊按鈕時,此變量將遞增
    ' 兩次。
    counter += 1
    ' 每次單擊按鈕時,消息框?qū)@示
    ' 兩次,并顯示不準(zhǔn)確的信息。
    messagebox.show (" 此繼承的按鈕已被單擊 " & _
    counter.tostring() & " 次。")
    end sub
    總結(jié)
    重載事件處理程序可能造成一些不易察覺的問題,并導(dǎo)致難以查出的錯誤。因此,設(shè)置與事件處理程序的正確關(guān)聯(lián)是非常重要的。請小心使用,并注意已經(jīng)存在的事件關(guān)聯(lián)。


    發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發(fā)表
    主站蜘蛛池模板: 内乡县| 涟水县| 南岸区| 永登县| 自贡市| 桃源县| 天祝| 庆元县| 柘荣县| 鄂伦春自治旗| 贵阳市| 永和县| 磐安县| 兰州市| 伊吾县| 杨浦区| 丹巴县| 犍为县| 大理市| 青川县| 东乌珠穆沁旗| 渑池县| 富阳市| 岳普湖县| 巴南区| 淳化县| 平塘县| 九寨沟县| 遂昌县| 嘉荫县| 德安县| 来宾市| 罗平县| 荆门市| 远安县| 古田县| 平邑县| 宜良县| 昌图县| 巨野县| 平利县|