在編輯數據庫的記錄時,可以用StatusBar控件通知用戶數據庫的各種屬性,例如正在編輯的表的名稱、其創建日期、以及最後一次更新的日期。
下面的代碼用到了如下對象:
名為“frmDataviewer”的Form
名為“sbrData”的StatusBar控件
名為“datData”的Data控件
添加顯示數據庫屬性的StatusBar
用Add方法創建Panel對象的集合。
為每個Panel對象配置AutoSize屬性。
用Panel對象的Text屬性顯示數據庫的屬性。
在PanelClick事件中用SelectCase語句重新設置屬性。
用Add方法創建Panel對象的集合
要在運行時創建Panel對象的集合,需要使用Add方法。首先需要聲明一個Panel類型的變量。在添加每個Panel對象時,可以用該變量包含對新創建的對象的引用。下面的代碼在Form對象的Load事件中創建了三個Panel對象。
PrivateSubForm_Load()
DimpnlXAsPanel
DimiAsInteger
Fori=1to3'第一個面板已存在。
SetpnlX=sbrData.Panels.Add()
Nexti
EndSub
注意:在向集合中添加了三個Panel對象之後,控件中實際上有四個面板,原因是該控件中已缺省地創建了一個面板。
為每個Panel對象配置AutoSize屬性
StatusBar控件的一個特性就是面板能夠根據自身的內容自動改變大小。下例循環遍歷了所有Panel對象,並將每個的AutoSize屬性設置為sbrSpring(1)。這樣每個面板通過“伸縮”分享該控件的總寬度。
PrivateSubForm_Load()
DimpnlXAsPanel
DimiAsInteger
Fori=1to3'第一個面板已存在。
SetpnlX=sbrData.Panels.Add()
Nexti
'改變所有面板的AutoSize。
Fori=1to4'<--新代碼
sbrData.Panels(i).AutoSize=sbrSpring'新
Nexti'新
EndSub
用Panel對象的Text屬性顯示數據庫的屬性
要改變所有面板中顯示的信息,只需設置該Panel對象的Text屬性即可。下面的代碼顯示了由數據訪問對象打開的數據庫的有關信息。
在Form對象的Load事件中,首先創建兩個數據庫變量,並分別賦值為打開的數據庫(Biblio.mdb)和記錄集(Authors)。然後代碼將Name、DateCreated、LastUpdated和LockEdit屬性的值賦予每個Panel對象的Text屬性。
'聲明數據庫變量。
DimmyDBAsDatabase,myRsAsRecordset
'將Database設置為BIBLIO.MDB數據庫。
SetmyDB=DBEngine.Workspaces(0)._
OpenDatabase("BIBLIO.MDB")
'將記錄集變量設置為Authors表。
SetmyRs=_
myDB.OpenRecordset("Publishers",dbOpenTable)
'將Text屬性設置為記錄集屬性。
sbrData.Panels(1).Text="名稱:"&myRs.Name
sbrData.Panels(2).Text="創建日期:"&_
myRs.DateCreated
sbrData.Panels(3).Text="上一次修改的日期:"&_
myRs.LastUpdated
sbrData.Panels(4).Text="編輯上鎖:"&myRs.LockEdits
在PanelClick事件中用SelectCase語句重新設置屬性
StatusBar控件還可以用來重新設置正在顯示的屬性。在上面的應用實例中,DataGrid控件被綁定到Data控件。(關於如何實現控件的數據綁定的詳細信息,請參閱《程序員指南》中的“使用VisualBasic標准控件”中的“使用ADO數據控件”)。在該StatusBar顯示的屬性中,只有LockEdits屬性可以被重新設置。要做到這一點,可以在PanelClick事件中使用SelectCase語句,確定單擊了哪個Panel對象。PanelClick事件包含有有對被單擊的Panel的引用。使用該引用即可重新設置被單擊的Panel對象的Text屬性。
下面的代碼首先創建Recordset類型的變量,並將其設置為由Data控件打開的記錄集。SelectCase語句被用來檢測Panel對象的Index屬性。如果Index為4,則LockEdits屬性在-1(True)和0(False)之間切換。最後,使用新的信息更新Panel對象的Text屬性。
PrivateSubsbrData_PanelClick(ByValPanelAsPanel)
DimmyRsAsRecordset'聲明Recordset變量。
'Data控件的名稱為"datData"
SetmyRs=datData.Recordset'設置變量。
SelectCasePanel.Index
Case1to3
'不能設置這些面板。
Case4'UpdateablePropertyissettable.
'切換該屬性。
myRs.LockEdits=Abs(myRs.LockEdits)-1
'更新Panel對象的Text屬性。
sbrData.Panels(4).Text="LockEdits:"_
&myRs.LockEdits
EndSelect
EndSub