Media Player 与 Flash 之类在网页上执行的外挂控件,都是属于 ActiveX 控件,它们套用在 HTML 码中的方式差不多,除了要指定 ClassID 以外,ActiveX 使用的参数(相当于 ActiveX 控件的属性)以 Param Tag 来表示。本文标题命名为「ActiveX 服务器控件」就是避免误解为 ActiveX 控件,而是在 ASP.NET 中输出 ActiveX 相关 HTML 码的服务器控件;我们可透过 ActiveX 服务器控件可以用来输出网页上引用 ActiveX 的通用 HTML 码,另外 ActiveX 的参数会以集合属性来呈现,所以也会一并学习到集合属性的撰写方式。
程序代码下载:ASP.NET Server Control - Day11.rar
一、集合属性
ActiveX 的 Param 参数是集合属性,所以我们定义了 TBActiveParam 类别描述 ActiveX 参数,包含 Name 及 Value 属性;而 TBActiveXParamCollection 为 TBActiveParam 的集合类别,用来描述 ActiveX 参数集合。TBActiveXParamCollection 继承 CollectionBase,加入操作集合的 Add、Insert、Remove、IndexOf、Contains 等方法,关于集合属性的用法可以参阅笔者在部落格的「撰写服务器控件的集合属性 (CollectionBase)」一文中有详细说明。
二、实作 ActiveX 服务器控件
step1. 新增继承 WebControl 的 TBActiveX
step2. 覆写 TagKey 属性,传回 object 的 Tag
Protected Overrides ReadOnly Property TagKey() As HtmlTextWriterTag
Get
Return HtmlTextWriterTag.Object
End Get
End Property
step3. 新增 ClassId 属性,描述 ActiveX 的 ClassId。
定义 ClassId 属性,并覆写 AddAttributesToRender 来输出此属性。
''' <summary>
''' 覆寫 AddAttributesToRender 方法。
''' </summary>
Protected Overrides Sub AddAttributesToRender(ByVal writer As HtmlTextWriter)
'加入 MediaPlayer ActiveX 元件的 classid
writer.AddAttribute("classid", String.Format("clsid:{0}", Me.ClassId))
MyBase.AddAttributesToRender(writer)
End Sub
step4. 新增 Params 属性,描述 ActiveX 的参数集合。
定义 Params 属性,型别为 TBActiveXParamCollection 类别,套用 EditorAttribute 设定 CollectionEditor 为集合编辑器。
''' <summary>
''' ActiveX 控制項參數集合。
''' </summary>
< _
Description("控制項參數集合。"), _
PersistenceMode(PersistenceMode.InnerProperty), _
DesignerSerializationVisibility(DesignerSerializationVisibility.Content), _
Editor(GetType(CollectionEditor), GetType(UITypeEditor)) _
> _
Public ReadOnly Property Params() As TBActiveXParamCollection
Get
If FParams Is Nothing Then
FParams = New TBActiveXParamCollection()
End If
Return FParams
End Get
End Property
当编辑 Params 时,会使用的 CollectionEditor 集合编辑器。
step5. 输出 ActiveX 参数
覆写 CreateChildControls 方法,在此方法依 Params 集合属性定义依序来输出 ActiveX 的参数集合。
Private Sub AddParam(ByVal Name As String, ByVal Value As String)
Dim oParam As HtmlControls.HtmlGenericControl
oParam = New HtmlControls.HtmlGenericControl("param")
oParam.Attributes.Add("name", Name)
oParam.Attributes.Add("value", Value)
Me.Controls.Add(oParam)
End Sub
''' <summary>
''' 建立子控制項。
''' </summary>
Protected Overrides Sub CreateChildControls()
Dim oParam As TBActiveXParam
'加入 ActiveX 參數集合
For Each oParam In Me.Params
AddParam(oParam.Name, oParam.Value)
Next
MyBase.CreateChildControls()
End Sub
三、执行程序
上一篇我们使用 TBMediaPlayer 控件来设定 Media Player,在此我们改用 TBActiveX 控件来设定 Media Player,一样可以呈现相同的结果。
<bee:TBActiveX ID="TBActiveX1" runat="server"
ClassId="6BF52A52-394A-11D3-B153-00C04F79FAA6" Height="250px" Width="250px">
<Params>
<bee:TBActiveXParam Name="URL" Value="d:/Movie_01.wmv" />
<bee:TBActiveXParam Name="autoStart" Value="true" />
</Params>
</bee:TBActiveX>
备注:本文同步发布于「第一届iT邦帮忙铁人赛」,如果你觉得这篇文章对您有帮助,记得连上去推鉴此文增加人气 ^^
http://ithelp.ithome.com.tw/question/10012159