自製 ProgressBar 控制項(三)
在 VB6 開發使用者控制時,可以寫一個名為 AboutBox() 的 Sub 做為簡介該控制項的程序,然後它會出現在屬性視窗中,點它就會執行 AboutBox 程序。
如下圖(VB6 的開發環境):
可是在 VS2010 裡面却沒找到這個機制(有人知道的話感謝賜告..),那就實做一個試試。
第一步:
-
開啟一個 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
- 在 Class UserControl 裡面加入以下列舉常數和屬性。
- 注意在 Property Set 的程式碼中並沒有更動屬性內容,這表示無論 User 選擇開啟或關閉,介面一律呈現[關閉]。
- 基本架構經編譯後就已經可以用了,在編輯階段測試(如下圖)。
第二步:
接下來再把它做得更細緻一點,用一個 Form 去代替那行 MsgBox(),並且讓這個 Form 在開啟一段時間後會自動關閉 :
- 在專案加一個 Windows Form,命名為 frm_About。
- 在表單加一個 Timer1,做為自動關閉的計時用。
- 表單的程式碼如下(注意它的建構函式是可傳入引數的)。
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 控制項為例)。
- 寫一個可接受引數(表單停留時間秒數)的程序去秀出表單畫面。
- 改寫屬性 Set 的程式碼,把原來的 Msgbox() 改為呼叫副程序 「秀出關於畫面()」,並設定視窗停留時間為60秒。
- 再於表單的 Load 事件中寫一小段 Code, 強制使用者在編輯階段使用或編譯時自動秀出5秒。
- 以下是 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
第四步:
編譯專案後測試結果。
- 從屬性視窗測試。
- 從取用時測試。
以下是實際用在前文 ku_ProgressBar 的擷圖:
專案原始碼下載[AboutBox.rar]
已編譯完成的 Dll 下載[ku_Controls_ProgressBar_dll.rar]