先說說需求,也就是我們要達到的效果,希望擴充套件按鈕控制項,增加一些屬性,但同時我們希望預設事件仍使用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 如果乙個方法被子類...