接續 [ASP.NET 控制項實作 Day21] 實作控制項智慧標籤 一文
step2. 在智慧標籤面板加入屬性項目
DesignerActionPropertyItem 類別是設定智慧標籤面上的屬性項目,DesignerActionPropertyItem 建構函式的第一個參數(memberName) 為屬性名稱,這個屬性指的是 TBDateEditActionList 類別中的屬性,所以要在 TBDateEditActionList 新增一個對應的屬性。
例如在智慧標籤中加入 AutoPostBack 屬性項目,則在 TBDateEditActionList 類別需有一個對應 AutoPostBack 屬性。
oItems.Add(New DesignerActionPropertyItem("AutoPostBack", _
"AutoPostBack", "Behavior", "是否引發 PostBack 動作。"))
TBDateEditActionList.AutoPostBack 屬性如下,其中 Me.Component 指的是目前的 TDateEdit 控制項,透過 GetPropertyValue 及 SetPropertyValue 方法來存取控制項的指定屬性。
''' <summary>
''' 是否引發 PostBack 動作。
''' </summary>
Public Property AutoPostBack() As Boolean
Get
Return CType(GetPropertyValue(Me.Component, "AutoPostBack"), Boolean)
End Get
Set(ByVal value As Boolean)
SetPropertyValue(Me.Component, "AutoPostBack", value)
End Set
End Property
''' <summary>
''' 設定物件的屬性值。
''' </summary>
''' <param name="Component">屬性值將要設定的物件。</param>
''' <param name="PropertyName">屬性名稱。</param>
''' <param name="Value">新值。</param>
Public Shared Sub SetPropertyValue(ByVal Component As Object, ByVal PropertyName As String, ByVal Value As Object)
Dim Prop As PropertyDescriptor = TypeDescriptor.GetProperties(Component).Item(PropertyName)
Prop.SetValue(Component, Value)
End Sub
''' <summary>
''' 取得物件的屬性值。
''' </summary>
''' <param name="Component">具有要擷取屬性的物件。</param>
''' <param name="PropertyName">屬性名稱。</param>
Public Shared Function GetPropertyValue(ByVal Component As Object, ByVal PropertyName As String) As Object
Dim Prop As PropertyDescriptor = TypeDescriptor.GetProperties(Component).Item(PropertyName)
Return Prop.GetValue(Component)
End Function
step3. 在智慧標籤面板加入方法項目
DesignerActionMethodItem 類別是設定智慧標籤面上的方法項目,DesignerActionPropertyItem 建構函式的第二個參數(memberName) 為方法名稱,這個方法指的是 TBDateEditActionList 類別中的方法,所以要在 TBDateEditActionList 新增一個對應的方法。
例如在智慧標籤中加入 About 方法項目,則在 TBDateEditActionList 類別需有一個對應 About 方法。
oItems.Add(New DesignerActionMethodItem(Me, "About", _
"關於 TDateEdit 控制項", "About", _
"關於 TDateEdit 控制項。", True))
TBDateEditActionList 的 About 方法只是單純顯示一個訊息視窗,一般你可以在這方法加入任何想在設計階段處理的動作。例如自動產生 GridView 的欄位、在 FormView 加入控制項並自動排版,這些都可以在此實現的。
Public Sub About()
MsgBox("TDateEdit 是結合 The Coolest DHTML Calendar 日期選擇器實作的控制項")
End Sub
備註:本文同步發佈於筆者「ASP.NET 魔法學院」部落格
http://www.dotblogs.com.tw/jeff377/archive/2008/10/22/5749.aspx