自製 ProgressBar 控制項(三)為控制項建立關於視窗 (About Box)

自製 ProgressBar 控制項(三)

在 VB6 開發使用者控制時,可以寫一個名為 AboutBox() 的 Sub 做為簡介該控制項的程序,然後它會出現在屬性視窗中,點它就會執行 AboutBox 程序。

如下圖(VB6 的開發環境):

in_vb6

 

可是在 VS2010 裡面却沒找到這個機制(有人知道的話感謝賜告..),那就實做一個試試。

 

第一步:

  1. 開啟一個 UserControl 專案。

    Imports System.ComponentModel
    Public Class UserControl1
        Public Enum 關於_觸發開關
            開啟
            關閉
        End Enum
        Private new_關於樣式 As 關於_觸發開關 = 關於_觸發開關.關閉
        <Description("關於這個 UserControl ..."), Browsable(True), Category("行為")> _
        Public Property 關於() As 關於_觸發開關
            Get
                Return new_關於樣式
            End Get
            Set(value As 關於_觸發開關)
                If value = 關於_觸發開關.開啟 Then
                    MsgBox("關於...")  '------暫用一個 MsgBox 代替 About_Form---
                End If
            End Set
        End Property
    End Class

  2. 在 Class UserControl 裡面加入以下列舉常數和屬性。
  3. 注意在 Property Set 的程式碼中並沒有更動屬性內容,這表示無論 User 選擇開啟或關閉,介面一律呈現[關閉]。
  4. 基本架構經編譯後就已經可以用了,在編輯階段測試(如下圖)。

in_vb2010

 

第二步:

接下來再把它做得更細緻一點,用一個 Form 去代替那行 MsgBox(),並且讓這個 Form 在開啟一段時間後會自動關閉 :

  1. 在專案加一個 Windows Form,命名為 frm_About。
  2. 在表單加一個 Timer1,做為自動關閉的計時用。
  3. 表單的程式碼如下(注意它的建構函式是可傳入引數的)。
Public Class frm_About
    Private _等待秒數 As Integer = 5
    Sub New(ByVal s As Integer)
        InitializeComponent()
        _等待秒數 = s
    End Sub
    Private Sub frm_About_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedToolWindow
        Timer1.Interval = 1000
        Timer1.Enabled = True
    End Sub
    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        Static t As Integer
        t = IIf(t < _等待秒數, t + 1, 0)
        If t = 0 Then Me.Dispose()
        Me.Text = _等待秒數 - t & " 秒後自動關閉.."
    End Sub
End Class

 

 

第三步:

再改一下 UserControl 的內容,以便呼叫 AboutBox 表單(以下以用前文的 ProgressBar 控制項為例)。

  1. 寫一個可接受引數(表單停留時間秒數)的程序去秀出表單畫面。
  2. 改寫屬性 Set 的程式碼,把原來的 Msgbox() 改為呼叫副程序 「秀出關於畫面()」,並設定視窗停留時間為60秒。
  3. 再於表單的 Load 事件中寫一小段 Code, 強制使用者在編輯階段使用或編譯時自動秀出5秒。
  4. 以下是 UserControl 完整的程式碼。

 

Imports System.ComponentModel
Public Class UserControl1
    Public Enum 關於_觸發開關
        開啟
        關閉
    End Enum
    Private new_關於樣式 As 關於_觸發開關 = 關於_觸發開關.關閉
    <Description("關於這個 UserControl ..."), Browsable(True), Category("行為")> _
    Public Property 關於() As 關於_觸發開關
        Get
            Return new_關於樣式
        End Get
        Set(value As 關於_觸發開關)
            If value = 關於_觸發開關.開啟 Then
                '---於屬性查看時, 停留60秒---
                秀出關於畫面(60)
            End If
        End Set
    End Property
    '---設計階段控制項取用(或編譯)時秀出 AboutBox ---
    Private Sub UserControl1_Load(sender As Object, e As EventArgs) Handles Me.Load
#If DEBUG Then
        '---設計階段且在 Debug 模式下第一次取用時,自動出現5秒---
        If DesignMode Then 秀出關於畫面(5)
#End If
    End Sub
    Sub 秀出關於畫面(ms As Integer)
        If Not IsNothing(ParentForm) Then
            Dim f = New frm_About(ms)
            f.ShowDialog()
        End If
    End Sub
End Class

 

 

第四步:

編譯專案後測試結果。

  1. 從屬性視窗測試。
  2. 從取用時測試。

ok_0 image

 

以下是實際用在前文 ku_ProgressBar 的擷圖:

image

 

 

 

專案原始碼下載[AboutBox.rar

已編譯完成的 Dll 下載[ku_Controls_ProgressBar_dll.rar


ku3