在編輯資料庫的記錄時,可以用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屬性即可。下面的代碼顯示了由Data Access Objects開啟的資料庫的有關資訊。
在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