zoukankan      html  css  js  c++  java
  • 控制項學習九(AttributeCollection及工具箱圖示)

     

    十一.屬性設計的進階技巧

    1.當屬性是指向某個集合或物件

    當我們使用某些控制項的時候,屬性似乎不是屬性,而是一個另外一個物件。看下面的例子。

    我們在頁面上布置一個TextBox,你會發現可以這樣用”me.TextBox1.Attributes.Add()”

    其實,Attributes是它的一個屬性。單純的屬性是不會有方法和其他屬性的,很顯然,Attributes是指向另外一個結構——AttributeCollection物件。

    Imports System.ComponentModel

    Imports System.Web.UI

    <DefaultProperty("items"), ToolboxData("<{0}:MyTestControlA runat=server></{0}:MyTestControlA>")> Public Class MyTestControlA

        Inherits System.Web.UI.WebControls.WebControl

        '儲存一個項目的類別

        Class DataItem

            Public data1 As String

            Sub New(ByVal data)

                data1 = data

            End Sub

        End Class

        '定義項目集合的類別(給屬性用)

        Class DataItems

            Inherits CollectionBase

            Default Public Property item(ByVal index As Integer) As DataItem

                Get

                    Return CType(List(index), DataItem)

                End Get

                Set(ByVal Value As DataItem)

                    List(index) = Value

                End Set

            End Property

            Public Sub Remove(ByVal value As DataItem)

                List.Remove(value)

            End Sub 'Remove

            Public Function Add(ByVal value As DataItem)

                Return List.Add(value)

            End Function 'Add

        End Class

        'DataItems

        Dim _items As New DataItems

        '指向 DataItems 的屬性

        <Bindable(True), Category("Appearance"), DefaultValue("")> Property items() As DataItems

            Get

                Return _items

            End Get

            Set(ByVal Value As DataItems)

                _items = Value

            End Set

        End Property

        Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)

            output.RenderBeginTag("div")

            output.Write("<br>MyTestControls<br>")

            If Not (items Is Nothing) Then

                '顯示 items 屬性中的每一個元素

                For Each i As DataItem In Me.items()

                    output.Write("<br>" & i.data1)

                Next

            End If

            output.RenderEndTag()

        End Sub

    End Class

    .NET Framework為了處理這種十分常用的需求,設計了CollectionBase,作為抽象的基底類別(Base Class)。

    3.指向陣列(集合)的預設屬性

    我們曾經提過,控制項的事件有預設事件,控制項的屬性也有預設屬性,要將屬性設為屬性相當簡單,只需要在宣告屬性的時候加上【Default】關鍵字即可,唯一一個條件,是該屬性必須有傳入值例如:

            Default Public Property item(ByVal index As Integer) As DataItem

                Get

                    Return CType(List(index), DataItem)

                End Get

                Set(ByVal Value As DataItem)

                    List(index) = Value

                End Set

            End Property

    之後,我們就可以這樣用Me.MyTestControlA1.items.item(0).data1=”abc”
     

    十二.控制項的工具箱圖示

    當我們建置控制項的時候,請加入一個“同名的”.bmp圖檔,這個圖檔是16X16的大小,建置動作必須為“內嵌資源”。

  • 相关阅读:
    自然常数e怎么得来的?
    一元线性回归模型
    最小二乘法
    Box-Cox转换
    需要的数学技能
    偏导数
    FineReport 表格分类
    FineReport 普通报表
    FineReport 单元格
    FineReport创建普通报表的流程
  • 原文地址:https://www.cnblogs.com/htht66/p/1334185.html
Copyright © 2011-2022 走看看