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