本示例工程說明了 MSFlexGrid 控件的某些事件和容器功能。它表明如何使用 Visual Basic 標(biāo)準(zhǔn)控件實(shí)現(xiàn)可進(jìn)行單元內(nèi)部編輯的工作表。創(chuàng)建 MSFlexGrid 數(shù)據(jù)顯示的步驟如下:
1. 創(chuàng)建控件。
2. 設(shè)置屬性。
3. 添加行標(biāo)頭和列標(biāo)頭。
4. 添加單元內(nèi)部編輯功能。
5. 向文本框(“編輯”框)添加更新數(shù)據(jù)的功能。
6. 將數(shù)據(jù)從文本框中復(fù)制到 MSFlexGrid。
安裝
方案中使用下述控件:
■ MSFlexGrid 控件
■ TextBox 控件
創(chuàng)建控件
本例中添加一個(gè) MSFlexGrid 控件并在其內(nèi)部添加一個(gè) TextBox 控件,由此創(chuàng)建父子關(guān)系。如下所示:
設(shè)置屬性
為 MSFlexGrid 控件和 TextBox 控件設(shè)置下述屬性:
對(duì)象 屬性 設(shè)置值
MSFlexGrid 控件 Name Fg2
Cols 6
Rows 20
FillStyle 1 - Repeat
FocusRect 2 - Heavy
FontName Arial
FontSize 9
TextBox Name txtEdit
FontName Arial
FontSize 9
BorderStyle 0 - None
Visible False
添加行標(biāo)頭和列標(biāo)頭
將下列代碼添加到窗體的 Form_Load 過程中以修改 MSFlexGrid 控件,使它在外觀上與工作表相象:
Sub Form_Load ()
Dim i As Integer
'使第一列較窄。
Fg2.ColWidth(0) = Fg2.ColWidth(0) / 2
Fg2.ColAlignment(0) = 1 '放置在正中。
'標(biāo)記行和列。
For i = Fg2.FixedRows To Fg2.Rows - 1
Fg2.TextArray(fgi(i, 0)) = i
Next
For i = Fg2.FixedCols To Fg2.Cols - 1
Fg2.TextArray(fgi(0, i)) = i
Next
'初始化編輯框(于是,現(xiàn)在可加載它)。
txtEdit = ""
End Sub
然后創(chuàng)建計(jì)算 TextArray 屬性索引值的函數(shù):
Function Fgi (r As Integer, c As Integer) As Integer
Fgi = c + Fg2.Cols * r
End Function
添加單元內(nèi)部編輯功能
示例應(yīng)用程序 (Flex.vbp) 演示了為移動(dòng)和選擇一組單元所需的功能。為添加單元內(nèi)部編輯功能,須將下列代碼添加到 MSFlexGrid 控件的 KeyPress 和 DblClick 事件中:
Sub Fg2_KeyPress (KeyAscii As Integer)
MSFlexGridEdit Fg2, txtEdit, KeyAscii
End Sub
Sub Fg2_DblClick ()
MSFlexGridEdit Fg2, txtEdit, 32 '模擬一個(gè)空格。
End Sub
為初始化文本框并將焦點(diǎn)從 MSFlexGrid 控件轉(zhuǎn)移到 TextBox,可添加下列例程:
Sub MSFlexGridEdit (MSFlexGrid As Control, _
Edt As Control, KeyAscii As Integer)
'使用已輸入的字符。
Select Case keyascii
'空格表示編輯當(dāng)前的文本。
Case 0 To 32
Edt = MSFlexGrid
Edt.SelStart = 1000
'其它所有字符表示取代當(dāng)前的文本。
Case Else
Edt = Chr(keyascii)
Edt.SelStart = 1
End Select
'在合適的位置顯示 Edt。
Edt.Move MSFlexGrid.CellLeft, MSFlexGrid.CellTop, _
MSFlexGrid.CellWidth, MSFlexGrid.CellHeight
Edt.Visible = True
'啟動(dòng)工作。
Edt.SetFocus
End Sub
為更新數(shù)據(jù)向 TextBox 添加新的功能
將下列例程添加到 TextBox 的 KeyPress 和 DblClick 事件中,以實(shí)現(xiàn)數(shù)據(jù)更新:
Sub txtEdit_KeyPress (KeyAscii As Integer)
'刪除回車符,以消除嘟嘟聲。
If KeyAscii = vbCr Then KeyAscii = 0
End Sub
Sub txtEdit_KeyDown (KeyCode As Integer, _
Shift As Integer)
EditKeyCode Fg2, txtEdit, KeyCode, Shift
End Sub
Sub EditKeyCode (MSFlexGrid As Control, Edt As _
Control, KeyCode As Integer, Shift As Integer)
'標(biāo)準(zhǔn)編輯控件處理。
Select Case KeyCode
Case 27 'ESC:隱藏焦點(diǎn)并將其返回 MSFlexGrid。
Edt.Visible = False
MSFlexGrid.SetFocus
Case 13 'ENTER 將焦點(diǎn)返回 MSFlexGrid。
MSFlexGrid.SetFocus
Case 38 '向上。
MSFlexGrid.SetFocus
DoEvents
If MSFlexGrid.Row > MSFlexGrid.FixedRows Then
MSFlexGrid.Row = MSFlexGrid.Row - 1
End If
Case 40 '向下。
MSFlexGrid.SetFocus
DoEvents
If MSFlexGrid.Row < MSFlexGrid.Rows - 1 Then
MSFlexGrid.Row = MSFlexGrid.Row + 1
End If
End Select
End Sub
將 TextBox 的數(shù)據(jù)復(fù)制到 MSFlexGrid
最后,當(dāng)把數(shù)據(jù)輸入到 TextBox 中時(shí),先告訴 MSFlexGrid 控件應(yīng)該對(duì)數(shù)據(jù)做什么。當(dāng)用戶輸入數(shù)據(jù)并按 ENTER 鍵,或用鼠標(biāo)單擊 MSFlexGrid 控件中的另一個(gè)單元時(shí),焦點(diǎn)將返回此控件。這時(shí) TextBox 中的文本被復(fù)制到活動(dòng)單元中。將下列代碼添加到 GotFocus 和 LeaveCell 事件過程中:
Sub Fg2_GotFocus ()
If txtEdit.Visible = False Then Exit Sub
Fg2 = txtEdit
txtEdit.Visible = False
End Sub
Sub Fg2_LeaveCell ()
If txtEdit.Visible = False Then Exit Sub
Fg2 = txtEdit
txtEdit.Visible = False
End Sub
運(yùn)行時(shí),就象在本例中那樣可在單個(gè)單元中輸入數(shù)據(jù):
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。