轉(zhuǎn)帖|其它|編輯:郝浩|2010-10-27 15:05:29.000|閱讀 1624 次
概述:Visual Basic中提供了許多標(biāo)準(zhǔn)控件和定制控件,每一個(gè)控件都可以提供一組特殊的用戶界面和編程能力。充分利用每一個(gè)控件的特性和方法,可以使編程工作更加容易、簡(jiǎn)單。 本文主要介紹利用微軟網(wǎng)格控件MSFlexGrid進(jìn)行編輯輸入,希望對(duì)大家有幫助。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Visual Basic中提供了許多標(biāo)準(zhǔn)控件和定制控件,每一個(gè)控件都可以提供一組特殊的用戶界面和編程能力。充分利用每一個(gè)控件的特性和方法,可以使編程工作更加容易、簡(jiǎn)單。
微軟網(wǎng)格控件MSFlexGrid是個(gè)定制控件。使用微軟網(wǎng)格控件,可以按行列順序顯示正文、數(shù)字和圖片,就象電子表格一樣。網(wǎng)格的高度、寬度和其它特性都可以進(jìn)行調(diào)整,而且網(wǎng)格的行和列可以單個(gè)地或成組地進(jìn)行操作。MSFlexGrid控件對(duì)包含在內(nèi)的單元內(nèi)容可進(jìn)行分類、合并以及格式化,并且可以與數(shù)據(jù)庫(kù)控件相綁定。MSFlexGrid控件具有50多種屬性,比其它網(wǎng)格控件功能更強(qiáng)大,靈活性更強(qiáng)。
但是MSFlexGrid控件同其它Grid網(wǎng)格控件一樣,用戶不能編輯網(wǎng)格單元中的內(nèi)容,在要求對(duì)其內(nèi)容進(jìn)行修改時(shí),這可能是一個(gè)缺陷。雖然可以對(duì)DBGrid控件進(jìn)行編程完成編輯的功能,但其功能不如MSFlexGrid強(qiáng)大。當(dāng)在錄入工作量比較大時(shí),如果利用MSFlexGrid進(jìn)行輸入,代替Text或其它控件,從而避免了界面的反復(fù)刷新和不斷地操作按鈕,錄入速度和效率會(huì)得以大大提高。
在應(yīng)用程序中使用 MSFlexGrid 之前,應(yīng)先將 MSFlxGrd.ocx 文件添加到工程中。
實(shí)現(xiàn)編輯網(wǎng)格單元的方案
為了僅僅要求實(shí)現(xiàn)能夠?qū)W(wǎng)格單元進(jìn)行輸入,可以在MSFlexGrid的KeyPress事件中加入以下代碼,但是修改編輯輸入后的內(nèi)容還十分困難。
Sub MSFLexGrid1_KeyPress(KeyAscii As Integer)
MSFlexGrid1.Text=MSFlexGrid1.Text & Chr$(KeyAscii)
End Sub
另外一種方法是文本框和網(wǎng)格相結(jié)合,用戶編輯操作文本框中的內(nèi)容,操作完后移至網(wǎng)格單元中。在這個(gè)過(guò)程中,應(yīng)該實(shí)現(xiàn)以下幾個(gè)功能:
(1)文本框能準(zhǔn)確定位,與待編輯網(wǎng)格單元相重合(2)平時(shí)文本框不顯示,當(dāng)進(jìn)行編輯操作時(shí)顯示(3)在輸入完一行后能自動(dòng)判斷并加一新行(4)按回車鍵確認(rèn)并自動(dòng)到下一列(5)雙擊網(wǎng)格單元可顯示文本框進(jìn)行編輯(6)文本框消失后,把文本框內(nèi)容移到網(wǎng)格單元中。
編輯網(wǎng)格單元的具體實(shí)現(xiàn)
建立一個(gè)新工程,在Form1上添加控件 Text1和MSFlexGrid1,根據(jù)表1設(shè)置其屬性。
首先要實(shí)現(xiàn)文本框顯示的時(shí)候,能與網(wǎng)格單元準(zhǔn)確重合。ShowTextBox子例程便可以實(shí)現(xiàn)此功能。在此考慮網(wǎng)格本身的Top和Left值、網(wǎng)格單元的高度和寬度、分隔網(wǎng)格單元的邊框的寬度。
Sub ShowTextBox()
With MSFlexGrid1
隱藏文本框,設(shè)置高度和寬度
Text1.Visible = False
Text1.Height = .RowHeight(.Row) - (Screen.TwipsPerPixelY) * 2
Text1.Width = .ColWidth(.Col)
計(jì)算文本框左坐標(biāo)
Text1.Left = .CellLeft + .Left
Text1.Top = .CellTop + .Top
Text1.Visible = True
Text1.SetFocus
End With
End Sub
當(dāng)有按鍵觸發(fā)網(wǎng)格單元時(shí),則把單元中的內(nèi)容保存到文本框中,然后顯示文本框等待編輯。
Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)
Dim char As String
If KeyAscii = 13 Then
Text1.Text = MSFlexGrid1.Text
Text1.SelStart = Len(Text1.Text)
Else
char = Chr$(KeyAscii)
Text1.Text = char
Text1.SelStart = 1
End If
ShowTextBox
KeyAscii = 0
End Sub
當(dāng)焦點(diǎn)離開一個(gè)網(wǎng)格單元時(shí),先保存文本框中的內(nèi)容到網(wǎng)格單元,然后檢測(cè)離開單元是否在最大行第一列(可自己設(shè)第幾列),如果是自動(dòng)加一行。
Private Sub MSFlexGrid1_LeaveCell()
MSFlexGrid1.Text = Text1.Text
If MSFlexGrid1.Col = 0 And MSFlexGrid1.Row <> 0 And _
MSFlexGrid1.Row = MSFlexGrid1.Rows - 1 And MSFlexGrid1.Text <> "" Then
MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1
End If
End Sub
為了響應(yīng)鼠標(biāo)動(dòng)作,添加以下代碼。
Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, _
x As Single, y As Single)
Text1.Visible = False
End Sub
當(dāng)網(wǎng)格單元發(fā)生變化時(shí),取網(wǎng)格單元內(nèi)容到文本框,等待編輯,從而保證文本框中的內(nèi)容最新。
Private Sub MSFlexGrid1_RowColChange()
Text1.Text = MSFlexGrid1.Text
End Sub
雙擊網(wǎng)格單元可以對(duì)網(wǎng)格單元中內(nèi)容進(jìn)行編輯。
Private Sub MSFlexGrid1_DblClick()
If MSFlexGrid1.Row > 0 And MSFlexGrid1.Col = 0 Then MSFlexGrid1_KeyPress 13
End Sub
文本框起輸入編輯框的作用,模擬網(wǎng)格單元,輸入到文本框的內(nèi)容,經(jīng)過(guò)處理送到網(wǎng)格中,當(dāng)輸入完后按回車鍵可以自動(dòng)到下一列,若為最后一列,跳轉(zhuǎn)到下一行的第一列等待輸入。
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
MSFlexGrid1.Text = Text1.Text
Text1.Visible = False
MSFlexGrid1.SetFocus
If MSFlexGrid1.Col < (MSFlexGrid1.Cols - 1) Then
MSFlexGrid1.Col = MSFlexGrid1.Col + 1
ElseIf MSFlexGrid1.Row < MSFlexGrid1.Rows - 1 Then
MSFlexGrid1.Row = MSFlexGrid1.Row + 1
MSFlexGrid1.Col = 0
End If
KeyAscii = 0
End If
End Sub
以上程序在VB6.0 (中文企業(yè)版)下運(yùn)行通過(guò),實(shí)現(xiàn)了對(duì)MSFlexGrid網(wǎng)格單元的輸入編輯。當(dāng)然還可以添加一些代碼完成對(duì)一些擊鍵的響應(yīng),如按Tab自動(dòng)到下一列,按Ese鍵取消輸入等,這都很容易做到,在此不再敘述。如果您使用VB6.0 (中文企業(yè)版),還可以用MSHFlexGrid控件來(lái)完成編輯輸入的功能。您可以在此下載程序清單。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載