电竞比分网-中国电竞赛事及体育赛事平台

分享

VB表格控件總覽與例程分析

 nxhujiee 2010-04-07
VB表格控件總覽與例程分析
━━━━━━━━━━━━━━━━━━━━━━━━━━
一.表格控件總覽: 

   在VB開發(fā)環(huán)境中,表格控件在界面開發(fā)元素中占有重要的地位。它不僅有外觀整潔、表達形式規(guī)范的優(yōu)點,而且更重要的是它較高的信息表現(xiàn)率(就是相對于其他控件來說能夠表達更多的信息),隨著信息時代的到來,它的應(yīng)用將更加的廣泛。 

   那么在VB平臺下,如何操作這一功能強大的控件元素呢?事實上我們知道,VB平臺下面的表格控件是相當(dāng)豐富的,總結(jié)下來提供了4種類型:Microsoft Data Bound grid Control、Microsoft Datagrid Control、Microsoft Flexgrid Control、Microsoft Hierarchial Flexgrid Control. 
這四種表格各有其特點,下面我們一一討論。 

   1. Microsoft Data Bound grid Control 

   此控件主要用于數(shù)據(jù)綁定(可以不綁定,但是因為不提供對單個cell的控制支持,所以實際上這樣做是不經(jīng)濟的)。具體說來,就是數(shù)據(jù)源比較固定的情況下可以使用這種控件。 

   具體使用方法是設(shè)定此控件的datasource屬性,就可以不用編寫任何代碼就可以顯示該數(shù)據(jù)源所指向的記錄數(shù)據(jù)。比如可以將datasource設(shè)置為一個data控件,而data控件又指向數(shù)據(jù)庫"成績"的 一個"語文"表,那么當(dāng)程序運行時,它就自動顯示此"語文"表的數(shù)據(jù)。 

   從上面的分析看得出來,這個控件雖然操作方便,但是它也有局限性,就是不能對顯示的數(shù)據(jù)進行靈活的控制操作,比如有些數(shù)據(jù)允許用戶修改,有些數(shù)據(jù)卻不允許用戶修改,而此控件卻只能提供全部數(shù)據(jù)源的原子操作:即要么全部允許修改,要么就全部不允許。還有另外此控件也不提供對單個單元格(cell)進行操作,所以提供不了更為個性化的界面風(fēng)格。 

   2. Microsoft Datagrid Control 

   此控件跟前面介紹的Data Bound grid Control控件很相似,也是主要進行綁定操作,而缺點和Data Bound grid Control完全一樣。但是它跟Data Bound grid Control不一樣的是其數(shù)據(jù)源的驅(qū)動引擎只能是OLEDB形式的,不能是DAO,比如就可以使用ADO數(shù)據(jù)控件,不能使用DATA控件。而Data Bound grid Control卻剛好和它相反,這一點在開發(fā)中一定要注意。 

   3. Microsoft Flexgrid Control與Microsoft Hierarchial Flexgrid Control. 

   這里重點介紹這兩種控件,因為在實際開發(fā)中,這兩種控件應(yīng)用的場合更多一些,它不僅能夠反映數(shù)據(jù),而且也能把數(shù)據(jù)的修改信息反映到數(shù)據(jù)庫中去,所以彌補了上述兩種控件的不足。 

   如果數(shù)據(jù)不需要修改,那么可以進行綁定操作,其方法跟前面介紹的完全一樣,就是通過設(shè)置DataSource屬性來完成數(shù)據(jù)的顯示工作。但是實際開發(fā)中,需要對整個表格控件更為靈活的顯示控制。 

   在給出例程之前,有必要對這一控件進行比較詳盡的認(rèn)識:這種控件允許將文本或者圖象放置于每個單元格之中,控件的Row與Col屬性允許用戶在代碼中指定當(dāng)前行和列,當(dāng)然也可通過操作鼠標(biāo)和鍵盤來改變這兩個屬性,而text屬性指明當(dāng)前單元格的文本。如果單元格的文本太長而不能完全顯示出來的話,可以通過將WordWrap屬性設(shè)置為true來達到顯示的目的。下面將比較重要的屬性小結(jié)如下: 

   DataSource---------用來指定需要綁定的數(shù)據(jù)源,比如data控件。 

   Cellpicture----------用來設(shè)定當(dāng)前單元格的圖象,便于顯示該圖象。此屬性不能在設(shè)計時使用。 

   Col,Row---------------設(shè)定當(dāng)前列和當(dāng)前行,注意它們均是從0開始的,如果同時設(shè)定它們,可以指定當(dāng)前的單元格。設(shè)計時也不能使用。 

   Cols,Rows---------------設(shè)置表格控件總的列數(shù)和行數(shù)。 

   Hwnd---------------表格句柄,可以結(jié)合Windows API對表格控件進行更高級的控制。 

   Text---------------指定當(dāng)前的單元格的文本內(nèi)容。 

   TextMatrix(i,j)-------此屬性比較重要,它用來指定第I行和第j列所確定的單元格的文本內(nèi)容。它等價于下面的代碼: 

MSHFlexGrid1.Rows =i 
MSHFlexGrid1.Cols =j 
MSHFlexGrid1.Text =指定的字符串 

   WordWrap-------為ture時可以在當(dāng)前單元格換行顯示,否則如果要顯示的字符的長度超過列寬,那么就不能顯示完全。 
二.例程分析: 

   以上只是介紹了表格控件經(jīng)常使用的屬性,還有很多其他重要的屬性這里限于篇幅就不一樣講解了,如果讀者有興趣的話可以參考MSDN上相關(guān)的內(nèi)容的介紹,下面我這里提供一個例程來鞏固前面的知識內(nèi)容。 
例程是使用Flexgrid 控件(由于Data Bound grid和Datagrid比較簡單,所以這里就不再介紹了),如果大家手頭上用的是MSHFlexgrid控件的話,只需要把名稱換為MSFlexGrid1即可。該例程主要實現(xiàn)后臺數(shù)據(jù)庫的顯示工作
主要代碼如下: 

Dim lastrow% '最后一次鼠標(biāo)點擊的行 
Dim lastcol% '最后一次鼠標(biāo)點擊的列 
Private Sub Command1_Click() 
MsgBox Data1.Database.Recordsets.Count 
End Sub

Private Sub Form_Load() 
'初始化數(shù)據(jù) 
click = False 
lastrow = 1 
lastcol = 1

'初始化data控件,進行綁定顯示的初始化 
Data1.DatabaseName = App.Path & "\db1.mdb" 
Data1.RecordSource = "成績表"

'進行非綁定顯示 
Data1.Refresh 
Data1.Recordset.MoveFirst 
MSFlexGrid2.Rows = Data1.Database.Recordsets.Count + 1 '設(shè)置總行數(shù) 
MSFlexGrid2.Cols = Data1.Recordset.Fields.Count + 1 '設(shè)置總列數(shù) 
MSFlexGrid2.GridColor = vbBlue '網(wǎng)格顏色 
MSFlexGrid2.ForeColor = vbRed '字體顏色 
MSFlexGrid2.GridLines = 1 '設(shè)置網(wǎng)格線的屬性 
MSFlexGrid2.GridLineWidth = 2 '設(shè)置網(wǎng)格線的粗細(xì)程序,默認(rèn)為1 
MSFlexGrid2.ToolTipText = "非綁定顯示" '設(shè)置工具提示文本 
MSFlexGrid2.BackColorSel = vbGreen '單元格被選中的顏色 
Dim i% 
Dim j% 
'設(shè)置列頭文本 
For i = 1 To MSFlexGrid2.Cols - 1 
MSFlexGrid2.TextMatrix(0, i) = Data1.Recordset.Fields(i - 1).Name 
Next i 
'設(shè)置數(shù)據(jù) 
For i = 1 To MSFlexGrid2.Rows - 1 '控制行

For j = 1 To MSFlexGrid2.Cols - 1 '控制列 
MSFlexGrid2.TextMatrix(i, j) = Data1.Recordset.Fields(j - 1).Value 
Next j 
Data1.Recordset.MoveNext 
Next i 
'設(shè)置當(dāng)前單元格的圖象信息 
MSFlexGrid2.Col = 0 
MSFlexGrid2.Row = 2 
Set MSFlexGrid2.CellPicture = LoadPicture(App.Path & "\cell.bmp") 
End Sub 
'實現(xiàn)鼠標(biāo)點擊一個單元格的背景顏色的改變功能 
Private Sub MSFlexGrid2_Click() 
MSFlexGrid2.Row = lastrow 
MSFlexGrid2.Col = lastcol 
MSFlexGrid2.CellBackColor = vbWhite 
MSFlexGrid2.Row = MSFlexGrid2.MouseRow 
MSFlexGrid2.Col = MSFlexGrid2.MouseCol
MSFlexGrid2.CellBackColor = vbCyan 
lastrow = MSFlexGrid2.Row 
lastcol = MSFlexGrid2.Col 
End Sub
  要在不綁定數(shù)據(jù)的情況下實現(xiàn)編輯修改的功能,如果對控件不進行改進是無法達到目的的。這里實現(xiàn)的思路是首先判斷光標(biāo)(或者說焦點)在哪個單元格上,然后在在單元格的范圍內(nèi)動態(tài)創(chuàng)建一個文本框(不過在vb平臺下,可以考慮先在設(shè)計時放置一個不可見的文本框,然后通過move方法將其放置到當(dāng)前單元格并且顯示它即可達到相同的目的),其大小正好可以把此單元格給覆蓋掉,然后就可以把原來的文本信息附給該文本框,這樣就可以直接在文本框內(nèi)進行編輯修改操作,從而實現(xiàn)了單元格的編輯修改功能,依據(jù)這個思想來可以在單元格里面創(chuàng)建下拉列表框,復(fù)選框等控件。其實現(xiàn)的核心代碼如下: 

'實現(xiàn)編輯功能 
Private Sub MSFlexGrid3_DblClick() 
Text1.Visible = False 
'如果初次雙擊,那么就執(zhí)行如下代碼 
If firstclick = True Then 
lastclickrow = MSFlexGrid3.Row 
lastclickcol = MSFlexGrid3.Col 
Text1.Text = MSFlexGrid3.TextMatrix(lastclickrow, lastclickcol) 
End If 
'將文本框放置到當(dāng)前單元格處 
Dim LeftOfText% '文本框的left屬性 
Dim TopOfText% '文本框的top屬性 
Dim selrow% '當(dāng)前行 
Dim selcol% '當(dāng)前列 
selrow = MSFlexGrid3.Row 
selcol = MSFlexGrid3.Col 
LeftOfText = Frame3.Left + MSFlexGrid3.Left + MSFlexGrid3.ColPos(selcol) + 45 
TopOfText = Frame3.Top + MSFlexGrid3.Top + MSFlexGrid3.RowPos(selrow) + 45 
Text1.Move LeftOfText, TopOfText, 930, 200 
Text1.Visible = True 
'如果不是初次雙擊,那么就執(zhí)行如下代碼 
If firstclick = False Then 
MSFlexGrid3.TextMatrix(lastclickrow, lastclickcol) = Text1.Text 
lastclickrow = MSFlexGrid3.Row 
lastclickcol = MSFlexGrid3.Col 
End If 
Text1.Text = MSFlexGrid3.TextMatrix(selrow, selcol) 
'已經(jīng)不是第一次進行雙擊操作 
firstclick = False 
End Sub
三.小結(jié): 

   數(shù)據(jù)表格控件在實際運用用還有很多技巧,只有不斷的在實際編程中積累經(jīng)驗才能達到靈活運用的功效。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多