比較C#自定義控件的property(屬性)和attribute(性質(zhì))
這兩天,在用c#自定義控件,.net他提供給我們的屬性窗口非常好用,我們可以不用寫代碼就可以改變屬性,那么如果我們自定義的控件,可不可以在屬性欄里直接改變它呢?
沒錯(cuò),是可以的。.net已經(jīng)為我們想好了(他們?cè)陂_發(fā)的過(guò)程中也是這么用的)。
首先舉個(gè)例子,我們要給自己定義的控件加一個(gè)字符串屬性(如果對(duì)屬性不懂的朋友,先去了解下什么是屬性)
- private string mytext
- public string Mytext
- {
- get
- {
- return this.mytext;
- }
- set
- {
- this.mytext = value;
- }
- }
這樣,我們就可以在程序中去獲取或改變Mytext屬性了,但是,我們現(xiàn)在的這個(gè)屬性,在vs開發(fā)環(huán)境中的屬性欄里看不到,為什么呢,因?yàn)槲覀冞€缺少點(diǎn)東西。如果我們?cè)趯傩缘那懊婕狱c(diǎn)東西,就可以了。
就像這樣使用C#自定義控件
- private string mytext
- [Browsable(true)]//指定是否在屬性欄可見
- [DesignerSerializationVisibility(DesignerSerializationVisibility .Visible )]//指定屬性對(duì)設(shè)計(jì)時(shí)序列化程序所具有的可見性。
- public string Mytext
- {
- get
- {
- return this.mytext;
- }
- set
- {
- this.mytext = value;
- }
- }
這樣再試試,我們就發(fā)現(xiàn),在屬性欄里可以對(duì)其進(jìn)行設(shè)置了。
其它還有很多這種屬性,如果有興趣,可以關(guān)注下System.ComponentModel命名空間
里面的類只要是Attribute結(jié)尾的,都是可以用到的屬性,貌似有好多,這里就不一一列舉了。
System.ComponentModel 命名空間提供用于實(shí)現(xiàn)組件和控件運(yùn)行時(shí)和設(shè)計(jì)時(shí)行為的類。此命名空間包括用于實(shí)現(xiàn)屬性和類型轉(zhuǎn)換器、綁定到數(shù)據(jù)源以及授權(quán)組件的基類和接口。
該命名空間中的類分為以下類別:
核心組件類。請(qǐng)參見 Component、IComponent、Container 和 IContainer 類。
組件授權(quán)。請(qǐng)參見 License、LicenseManager、LicenseProvider 和 LicenseProviderAttribute 類。
屬性。請(qǐng)參見 Attribute 類。
說(shuō)明符和持久性。請(qǐng)參見 TypeDescriptor、EventDescriptor 和 PropertyDescriptor 類。
類型轉(zhuǎn)換器。請(qǐng)參見 TypeConverter 類。
以上就是C#自定義控件property和attribute不同的介紹。
【編輯推薦】