在編輯數(shù)據(jù)庫的記錄時,可以用 StatusBar 控件通知用戶數(shù)據(jù)庫的各種屬性,例如正在編輯的表的名稱、其創(chuàng)建日期、以及最后一次更新的日期。
下面的代碼用到了如下對象:
名為“frmDataviewer”的 Form
名為“sbrData”的 StatusBar 控件
名為“datData”的 Data 控件
添加顯示數(shù)據(jù)庫屬性的 StatusBar
用 Add 方法創(chuàng)建 Panel 對象的集合。
為每個 Panel 對象配置 AutoSize 屬性。
用 Panel 對象的 Text 屬性顯示數(shù)據(jù)庫的屬性。
在 PanelClick 事件中用 Select Case 語句重新設置屬性。
用 Add 方法創(chuàng)建 Panel 對象的集合
要在運行時創(chuàng)建 Panel 對象的集合,需要使用 Add 方法。首先需要聲明一個 Panel 類型的變量。在添加每個 Panel 對象時,可以用該變量包含對新創(chuàng)建的對象的引用。下面的代碼在 Form 對象的 Load 事件中創(chuàng)建了三個 Panel 對象。
Private Sub Form_Load()
Dim pnlX As Panel
Dim i As Integer
For i = 1 to 3 '第一個面板已存在。
Set pnlX = sbrData.Panels.Add()
Next i
End Sub
注意:在向集合中添加了三個 Panel 對象之后,控件中實際上有四個面板,原因是該控件中已缺省地創(chuàng)建了一個面板。
為每個 Panel 對象配置 AutoSize 屬性
StatusBar 控件的一個特性就是面板能夠根據(jù)自身的內(nèi)容自動改變大小。下例循環(huán)遍歷了所有 Panel 對象,并將每個的 AutoSize 屬性設置為 sbrSpring(1)。這樣每個面板通過“伸縮”分享該控件的總寬度?! ?
Private Sub Form_Load()
Dim pnlX As Panel
Dim i As Integer
For i = 1 to 3 '第一個面板已存在。
Set pnlX = sbrData.Panels.Add()
Next i
'改變所有面板的 AutoSize。
For i = 1 to 4 ' < -- 新代碼
sbrData.Panels(i).AutoSize = sbrSpring '新
Next i '新
End Sub
用 Panel 對象的 Text 屬性顯示數(shù)據(jù)庫的屬性
要改變所有面板中顯示的信息,只需設置該 Panel 對象的 Text 屬性即可。下面的代碼顯示了由數(shù)據(jù)訪問對象打開的數(shù)據(jù)庫的有關信息?! ?
在 Form 對象的 Load 事件中,首先創(chuàng)建兩個數(shù)據(jù)庫變量,并分別賦值為打開的數(shù)據(jù)庫 (Biblio.mdb) 和記錄集 (Authors)。然后代碼將 Name、DateCreated、LastUpdated 和 LockEdit 屬性的值賦予每個 Panel 對象的 Text 屬性?! ?
'聲明數(shù)據(jù)庫變量。
Dim myDB As Database, myRs As Recordset
'將 Database 設置為 BIBLIO.MDB 數(shù)據(jù)庫。
Set myDB = DBEngine.Workspaces(0). _
OpenDatabase("BIBLIO.MDB")
'將記錄集變量設置為 Authors 表。
Set myRs = _
myDB.OpenRecordset("Publishers", dbOpenTable)
'將 Text 屬性設置為記錄集屬性。
sbrData.Panels(1).Text = "名稱:" & myRs.Name
sbrData.Panels(2).Text = "創(chuàng)建日期:" & _
myRs.DateCreated
sbrData.Panels(3).Text = "上一次修改的日期:" & _
myRs.LastUpdated
sbrData.Panels(4).Text = "編輯上鎖:" & myRs.LockEdits
在 PanelClick 事件中用 Select Case 語句重新設置屬性
StatusBar 控件還可以用來重新設置正在顯示的屬性。在上面的應用實例中,DataGrid 控件被綁定到 Data 控件。(關于如何實現(xiàn)控件的數(shù)據(jù)綁定的詳細信息,請參閱《程序員指南》中的“使用 Visual Basic 標準控件”中的“使用 ADO 數(shù)據(jù)控件”)。在該 StatusBar 顯示的屬性中,只有 LockEdits 屬性可以被重新設置。要做到這一點,可以在 PanelClick 事件中使用 Select Case 語句,確定單擊了哪個 Panel 對象。PanelClick 事件包含有有對被單擊的 Panel 的引用。使用該引用即可重新設置被單擊的 Panel 對象的 Text 屬性?! ?
下面的代碼首先創(chuàng)建 Recordset 類型的變量,并將其設置為由 Data 控件打開的記錄集。Select Case 語句被用來檢測 Panel 對象的 Index 屬性。如果 Index 為 4,則 LockEdits 屬性在 -1 (True) 和 0 (False) 之間切換。最后,使用新的信息更新 Panel 對象的 Text 屬性?! ?
Private Sub sbrData_PanelClick(ByVal Panel As Panel)
Dim myRs As Recordset '聲明 Recordset 變量。
'Data 控件的名稱為 "datData"
Set myRs = datData.Recordset '設置變量?! ?
Select Case Panel.Index
Case 1 to 3
'不能設置這些面板。
Case 4 ' Updateable Property is settable.
'切換該屬性。
myRs.LockEdits = Abs(myRs.LockEdits) - 1
'更新 Panel 對象的 Text 屬性。
sbrData.Panels(4).Text = "LockEdits: " _
& myRs.LockEdits
End Select
End Sub