• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

        從頭創(chuàng)建 Visual Basic .NET 控件 (4)

        從頭創(chuàng)建 Visual Basic .NET 控件 (4)

        更新時(shí)間:2019-11-23 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

        第 3 步:實(shí)現(xiàn)屬性和事件
        要實(shí)現(xiàn) Status 屬性,首先要為可能的屬性值創(chuàng)建枚舉。將以下幾行插入以 Inherits 開(kāi)始的行下面:

        Public Enum TrafficLightStatus
        statusRed = 1
        statusYellow = 2
        statusGreen = 3
        End Enum

        此枚舉是公開(kāi)的,也就是說(shuō)使用該控件的窗體可以訪問(wèn)它。

        在這些行下面添加以下三行:

        Dim mStatus As TrafficLightStatus = TrafficLightStatus.statusGreen
        Dim msngBorderWidth As Single = 1.0!
        Public Event StatusChanged(ByVal NewStatus As TrafficLightStatus)

        前兩行中的兩個(gè)變量可用于存儲(chǔ) Status 和 BorderWidth 屬性的屬性值,還為這些屬性設(shè)置了默認(rèn)值。保存 BorderWidth 的變量必須為 Single 類(lèi)型,因?yàn)樗抢L制邊框所用的圖形語(yǔ)句需要的類(lèi)型。默認(rèn)值中的驚嘆號(hào)也表明它是 Single 類(lèi)型。此集合中的最后一行聲明了 StatusChanged 事件。

        現(xiàn)在,我們?yōu)?BorderWidth 屬性編寫(xiě)代碼。在標(biāo)記為 Windows Form Designer Generated Code(Windows 窗體設(shè)計(jì)器生成的代碼)的代碼區(qū)域下插入以下行:

        <DefaultValue(1.0!), _
        Description("紅綠燈周?chē)吙虻膶挾?quot;)> _
        Public Property BorderWidth() As Single
        Get
        Return msngBorderWidth
        End Get
        Set(ByVal Value As Single)
        If msngBorderWidth <> Value Then
        msngBorderWidth = Value
        Me.Invalidate()
        End If
        End Set
        End Property

        前兩行包括使該屬性更好地使用 IDE 的屬性。DefaultValue 特性允許在 Properties(屬性)窗口中將屬性值重置為默認(rèn)值(操作步驟稍后介紹)。Description 特性提供選中該屬性時(shí)在 Properties(屬性)窗口底部顯示的文本。

        DefaultValue 特性還有一個(gè)技巧。如果將 TrafficLight 控件放到窗體上,并保留 BorderWidth 屬性的默認(rèn)值,那么窗體設(shè)計(jì)器將不生成設(shè)置屬性值的代碼行。這使它與其他 Windows 窗體控件沒(méi)有什么區(qū)別。如果您查看典型控件(如 TextBox)的設(shè)計(jì)器生成的代碼,您會(huì)發(fā)現(xiàn)只包括設(shè)置為非默認(rèn)值的屬性的代碼行。我們賦予 TrafficLight 控件同樣的能力。

        Property Get 簡(jiǎn)單明了。Property Set 子句包括可視控件屬性中常見(jiàn)的邏輯。設(shè)置屬性時(shí),重要的是在新屬性值更改控件的外觀時(shí)要能夠重新繪制控件。因此,Set 子句負(fù)責(zé)確定傳遞的新值是否與屬性中現(xiàn)有的值不相同。如果相同,則不執(zhí)行操作。如果不同,則接受新值,然后訪問(wèn)控件的 Invalidate 方法。此方法表明,控件的可視區(qū)域已過(guò)期,控件需要重新繪制。

        Status 屬性的處理有些不同,因?yàn)樗敲杜e值。DefaultValue 特性沒(méi)有為枚舉屬性提供自動(dòng)重置能力。在這種情況下,DefaultValue 也無(wú)法告訴設(shè)計(jì)器何時(shí)停止設(shè)置屬性值的代碼。因此,Status 屬性的實(shí)現(xiàn)中不需要 DefaultValue 特性。下面是 Status 屬性的代碼:

        <Description("紅綠燈的狀態(tài)(顏色)")> _
        Public Property Status() As TrafficLightStatus
        Get
        Status = mStatus
        End Get
        Set(ByVal Value As TrafficLightStatus)
        If mStatus <> Value Then
        mStatus = Value
        RaiseEvent StatusChanged(mStatus)
        Me.Invalidate()
        End If
        End Set
        End Property

        看起來(lái)與 BorderWidth 屬性的實(shí)現(xiàn)類(lèi)似,只有一點(diǎn)不同:當(dāng) Status 屬性發(fā)生改變時(shí),除了強(qiáng)制重新繪制控件外,還會(huì)觸發(fā) StatusChanged 事件。

        要在 Properties(屬性)窗口中處理屬性的自動(dòng)重置,我們需要使用一種特殊的方法。由于我們的屬性命名為 Status,因此必須將重置方法命名為 ResetStatus。重置方法只是恢復(fù)屬性的默認(rèn)值。以下是其代碼:

        Public Sub ResetStatus()
        Me.Status = TrafficLightStatus.statusGreen
        End Sub

        為了提示設(shè)計(jì)器何時(shí)需要包括一行代碼以便設(shè)置 Status 屬性,我們需要包括一個(gè)名為 ShouldSerializeStatus 的方法。當(dāng)屬性需要一行代碼時(shí),此方法返回布爾值 True,否則,則返回 False。以下是其代碼:

        Public Function ShouldSerializeStatus() As Boolean
        If mStatus = TrafficLightStatus.statusGreen Then
        Return False
        Else
        Return True
        End If
        End Function

        溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

        本類(lèi)教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 亚洲宅男天堂在线观看无病毒| 暖暖免费中文在线日本| 久久精品国产亚洲一区二区三区| 巨波霸乳在线永久免费视频| 九九全国免费视频| 亚洲人成色777777老人头| 2022年亚洲午夜一区二区福利 | 国产亚洲精品看片在线观看| 在线免费观看视频你懂的| 99久久精品免费视频| 99免费在线视频| 一级一片免费视频播放| 久久人午夜亚洲精品无码区| 国产成人精品日本亚洲18图| 亚洲美女在线观看播放| 亚洲精品免费观看| 亚洲国产精品福利片在线观看| 亚洲色偷偷狠狠综合网| 国产乱人免费视频| 免费激情视频网站| 国产三级在线观看免费| 999国内精品永久免费观看| 免费A级毛片无码A∨| 久久这里只精品国产免费10| A级毛片高清免费视频在线播放| 国产黄片不卡免费| 一个人看的在线免费视频| 在线播放国产不卡免费视频| 一区二区三区AV高清免费波多| 理论秋霞在线看免费| 三级片免费观看久久| 一级做a爱过程免费视| 91av免费在线视频| 国产在线观a免费观看| 国产在线观看免费视频软件| av永久免费网站在线观看 | 亚洲色婷婷综合久久| 亚洲日韩精品无码一区二区三区| 在线亚洲精品自拍| 国产亚洲人成无码网在线观看 | 免费国产黄网站在线观看视频|