在編輯數(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 類(lèi)型的變量。在添加每個(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ì)象打開(kāi)的數(shù)據(jù)庫(kù)的有關(guān)信息。
在 Form 對(duì)象的 Load 事件中,首先創(chuàng)建兩個(gè)數(shù)據(jù)庫(kù)變量,并分別賦值為打開(kāi)的數(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 類(lèi)型的變量,并將其設(shè)置為由 Data 控件打開(kāi)的記錄集。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