Discuz NT借鑑學習之 自定義控制項剖析

2021-06-05 13:18:07 字數 3800 閱讀 1136

自定義控制項需要定義乙個直接或間接從 control 類派生的類,並重寫 render 方法。在 .net 框架中, system.web.ui.control 與system.web.ui.webcontrols.webcontrol 兩個類是伺服器控制項的基類,並且定義了所有伺服器控制項共有的屬性、方法和事件,其中最為重要的就是包括了控制控制項執行生命週期的方法和事件,以及id等共有屬性。 實現自定義控制項,必須建立乙個自定義控制項,自定義控制項將會編譯成 dll檔案。

首先看一下執行效果:

建立自定義伺服器控制項**

建立discuz.contrcol類庫檔案,在其中建立button.cs 檔案

引用system.web.ui.webcontrols和system.componentmodel命名空間

button.cs檔案部分**如下:

namespace discuz.controls

:button runat=server>")]

public class button : system.web.ui.webcontrols.webcontrol,ipostbackeventhandler

public buttontype buttontypemode

set}

#endregion

/***省略*/}}

**討論:如果控制項要呈現使用者介面 (ui) 元素或任何其他客戶端可見的元素,則應從system.web.ui.webcontrols.webcontrol(或派生類)派生該控制項。如果控制項要呈現在客戶端瀏覽器中不可見的元素(如隱藏元素或meta元素),則應從system.web.ui.control派生該控制項。    

defaulteventattribute

設計時屬性。

在視覺化設計器中指定控制項的預設事件。在許多視覺化設計器中,頁開發人員在設計圖面上雙擊控制項時,將開啟**編輯器,同時將游標定位到預設事件的事件處理程式中。

示例:defaultevent("click")

defaultpropertyattribute

設計時屬性。

當頁開發人員在設計圖面上選擇控制項時,此屬性 (attribute) 中指定的屬性 (property) 將在視覺化設計器的屬性 (property) 瀏覽器中突出顯示此預設屬性。

示例:[defaultproperty("text")]

toolboxdataattribute

設計時屬性。

指定從工具箱建立控制項時視覺化設計器為標記建立的標記格式。

示例:toolboxdata("<:button runat="server">")

更多關於自定義伺服器控制項的元資料屬性的介紹請參考:

viewstate

獲取狀態資訊的字典,這些資訊使您可以在同一頁的多個請求間儲存和還原伺服器控制項的檢視狀態。命名空間:system.web.ui

示例:

public string text

set}

按鈕上顯示的文字

#region property text 按鈕文字

/// /// 按鈕文字

///

public string text

set}

#endregion

**討論:

bindableattribute

設計時屬性。

指定將資料繫結到屬性是否有意義。在視覺化設計器中,屬性瀏覽器可以在對話方塊中顯示控制項的可繫結屬性。(例如,在 visual studio 中,可繫結屬性顯示在「資料繫結」對話方塊中。) 如果屬性 (property) 沒有使用此屬性 (attribute) 標記,則屬性 (property) 瀏覽器會推斷其值為 bindable(false)。

示例:[bindable(true)]

categoryattribute

設計時屬性。

示例:

defaultvalueattribute

設計時屬性。

指定屬性的預設值。此值應與從屬性訪問器 (getter) 返回的預設值相同。在有些視覺化設計器(如 visual studio)中,defaultvalueattribute 屬性允許頁開發人員使用快捷選單上的「重置」命令將屬性值重置為其預設值。

示例:defaultvalue(" 提 交 ")

#region property buttonimgurl 圖版按鈕鏈結

///

[description("圖版按鈕鏈結"), defaultvalue("../images/submit.gif")]

public string buttonimgurl

set}

#endregion

**討論:descriptionattribute設計時屬性。

指定屬性的簡短描述。在視覺化設計器(如 visual studio)中,屬性瀏覽器通常在視窗底部顯示選定的屬性的描述。

defaultvalueattribute

設計時屬性。

指定屬性的預設值。此值應與從屬性訪問器 (getter) 返回的預設值相同。在有些視覺化設計器(如 visual studio)中,defaultvalueattribute屬性允許頁開發人員使用快捷選單上的「重置」命令將屬性值重置為其預設值。

示例:defaultvalue("../images/submit.gif")

背景路徑

#region property xpbgimgfilepath xp背景路徑

/// /// xp背景路徑

///

[description("圖版按鈕鏈結"), defaultvalue("../images/")]

public string xpbgimgfilepath

set}

#endregion

**討論:由於關於此屬性的知識點已在前面屬性中進行了講解,這裡就不再贅述,下面此情況同理

要載入的客戶端指令碼內容

#region property scriptcontent 要載入的客戶端指令碼內容

/// /// 要載入的客戶端指令碼內容

///

[description("圖版按鈕鏈結"), defaultvalue("../images/")]

public string scriptcontent

set}

#endregion

Discuz NT控制項剖析 之 Button

在開源之後,還沒什麼文章來說明 discuz nt專案的一些特點。作為這個控制項庫的設計者,本人 將在接下來的時間裡用 的方式來向大家解釋其中一些控制項的設計思想,實現功能以及一些未曾 使用過的功能展示 因為管理後台只使用控制項的部分功能 同時因為這組控制項開發的週期很短 當 時僅用乙個半月,後不斷...

R TREE學習借鑑之路

在trajectory中,r tree是基礎,看了 不是特別明白,看下部落格,進一步理解 1.比較清楚講解的link然後,在內部裡面,閱讀聯想b tree提到的僅包含key 在non leaf 節點的舉例,前後聯想r tree,融會貫通 2.實現部分,忘了typedef struct用法,順便複習一...

親密接觸Discuz!NT之架構篇

慮到使用者的實際應用需求和面向未來的軟體開發理念,discuz nt在設計和開發之初就構建了優良的架構,大大提高了軟體的伸縮性 可擴充套件性和重用性。本架構除了使discuz nt自身結構更為清晰和更易於維護以外,也為使用者進行二次開發和完善論壇個性化提供了極大的方便。discuz nt採用了如下的...