技巧篇 如何重寫基類的事件

2021-09-01 01:58:06 字數 1496 閱讀 4478

先說說需求,也就是我們要達到的效果,希望擴充套件按鈕控制項,增加一些屬性,但同時我們希望預設事件仍使用click事件,不過,在事件引數中,我們希望能夠傳遞更多的資訊,而不是button.click預設的引數。

當然,我們首先要寫乙個自定義的事件引數,為了簡單起見,我們的自定義按鈕控制項,增加乙個tagnumber屬性,它傳遞乙個整型資料,當我們處理控制項的click事件,能夠從事件引數類例項中取得我們在這個屬性中設定的值,因此,我們需要乙個mybuttonclickagre,它從eventargs類派生。

/// /// 自定義事件引數類。 /// internal class mybuttonclickagre : eventargs public int thenumber } }

現在,從button類派生乙個新類。

public class mybutton:button /// /// 用作引數傳遞的整型資料。 /// [system.componentmodel.browsable(true)] [system.componentmodel.description("獲取或設定乙個整數。")] [system.componentmodel.category("資料")] public int tagnumber set } }

好,tagnumber屬性定義好了,browsable特性表示控制項中設計時是否顯示在「屬性」視窗中,description用一些文字描述屬性有什麼用途這類的資訊,category表示該屬性在「屬性」視窗屬於哪個類別,可能很多人覺得要傳遞乙個英文的字串作為分類名,其實不一定,如果你的vs是中文版的,你完全可以使用中文名字,如上面的「資料」。

在「屬性」視窗中瀏覽該控制項的屬性如下圖所示。

下面,我們還有一件重要的事情要做,那就是重寫基類的click事件。這裡有兩種方法:

1、第一種方法不算得上是重寫事件,應該說是我們經常做的重寫on????方法,如我們下面要通過重寫onclick方法來達到我們要的效果。

/// /// 重寫onclick方法。 /// protected override void onclick(eventargs e)

這樣,我們自定義的事件引數就傳到事件處理程式了。

2、第二種方法才算是重寫事件,通過new關鍵字重新定義乙個click事件。

// 新的click事件。 public new eventhandler click; /// /// 重寫onclick方法。 /// protected override void onclick(eventargs e) }

這個時候,我們就不需要基類的onclick方法了,所以也不用再寫上base.onclick(e);。

現在,我們重新生成一下專案,切換到winform設計器視窗,在工具箱中就能看到我們自定義的控制項了。

好,現在可以測一測這個新控制項了。

public partial class form1 : form private void mybutton1_click(object sender, eventargs e) } } }

看看結果。

技巧篇 如何重寫基類的事件

先說說需求,也就是我們要達到的效果,希望擴充套件按鈕控制項,增加一些屬性,但同時我們希望預設事件仍使用click事件,不過,在事件引數中,我們希望能夠傳遞更多的資訊,而不是button.click預設的引數。當然,我們首先要寫乙個自定義的事件引數,為了簡單起見,我們的自定義按鈕控制項,增加乙個tag...

c 專題 基類的重寫

一 c 支援重寫例項方法和屬性,但是不支援重寫字段和任何靜態成員,為了進行重寫,需要將需要重寫的成員用virtual關鍵字標記。如下 1 方法的重寫 class father classme father class son me 呼叫如下 father father newme father.my...

c 隱藏基類方法和重寫基類方法的區別

最近重新學習c 中基礎,找到了隱藏基類方法和重寫基類方法的一點區別,二者都是在派生類中定義了與基類中相同的方法,相同點派生類物件將執行各自的派生類中的方法,不同點,在向上轉型後,重寫基類方法的呼叫的是派生類的方法,而隱藏基類呼叫的是基類的方法,具體實驗 class program 如果乙個方法被子類...