程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB6 >> 利用微軟網格控件進行編輯輸入

利用微軟網格控件進行編輯輸入

編輯:VB6

Visual Basic中提供了許多標准控件和定制控件,每一個控件都可以提供一組特殊的用戶界面和編程能力。充分利用每一個控件的特性和方法,可以使編程工作更加容易、簡單。

微軟網格控件MSFlexGrid是個定制控件。使用微軟網格控件,可以按行列順序顯示正文、數字和圖片,就象電子表格一樣。網格的高度、寬度和其它特性都可以進行調整,而且網格的行和列可以單個地或成組地進行操作。MSFlexGrid控件對包含在內的單元內容可進行分類、合並以及格式化,並且可以與數據庫控件相綁定。MSFlexGrid控件具有50多種屬性,比其它網格控件功能更強大,靈活性更強。

但是MSFlexGrid控件同其它Grid網格控件一樣,用戶不能編輯網格單元中的內容,在要求對其內容進行修改時,這可能是一個缺陷。雖然可以對DBGrid控件進行編程完成編輯的功能,但其功能不如MSFlexGrid強大。當在錄入工作量比較大時,如果利用MSFlexGrid進行輸入,代替Text或其它控件,從而避免了界面的反復刷新和不斷地操作按鈕,錄入速度和效率會得以大大提高。

在應用程序中使用 MSFlexGrid 之前,應先將 MSFlxGrd.ocx 文件添加到工程中。

實現編輯網格單元的方案

為了僅僅要求實現能夠對網格單元進行輸入,可以在MSFlexGrid的KeyPress事件中加入以下代碼,但是修改編輯輸入後的內容還十分困難。

  Sub MSFLexGrid1_KeyPress(KeyAscii As Integer)
   MSFlexGrid1.Text=MSFlexGrid1.Text & Chr$(KeyAscii)
   End Sub

另外一種方法是文本框和網格相結合,用戶編輯操作文本框中的內容,操作完後移至網格單元中。在這個過程中,應該實現以下幾個功能:

(1)文本框能准確定位,與待編輯網格單元相重合(2)平時文本框不顯示,當進行編輯操作時顯示(3)在輸入完一行後能自動判斷並加一新行(4)按回車鍵確認並自動到下一列(5)雙擊網格單元可顯示文本框進行編輯(6)文本框消失後,把文本框內容移到網格單元中。

編輯網格單元的具體實現

建立一個新工程,在Form1上添加控件 Text1和MSFlexGrid1,根據表1設置其屬性。

表1 表單Form1的對象和屬性

對象 屬性 設置 Text1 Visible False Text “” MSFlexGrid1 Rows 2 Cols 根據字段數目自行設置 FixedCols 0 FixedRows 1

首先要實現文本框顯示的時候,能與網格單元准確重合。ShowTextBox子例程便可以實現此功能。在此考慮網格本身的Top和Left值、網格單元的高度和寬度、分隔網格單元的邊框的寬度。

  Sub ShowTextBox()
     With MSFlexGrid1
     '隱藏文本框,設置高度和寬度
     Text1.Visible = False
     Text1.Height = .RowHeight(.Row) - (Screen.TwipsPerPixelY) * 2
     Text1.Width = .ColWidth(.Col)
     ' 計算文本框左坐標
     Text1.Left = .CellLeft + .Left
     Text1.Top = .CellTop + .Top
     Text1.Visible = True
     Text1.SetFocus
   End With
   End Sub

當有按鍵觸發網格單元時,則把單元中的內容保存到文本框中,然後顯示文本框等待編輯。

  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

當焦點離開一個網格單元時,先保存文本框中的內容到網格單元,然後檢測離開單元是否在最大行第一列(可自己設第幾列),如果是自動加一行。

  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

為了響應鼠標動作,添加以下代碼。

  Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, _
                   x As Single, y As Single)
   Text1.Visible = False
   End Sub

當網格單元發生變化時,取網格單元內容到文本框,等待編輯,從而保證文本框中的內容最新。

  Private Sub MSFlexGrid1_RowColChange()
   Text1.Text = MSFlexGrid1.Text
   End Sub

雙擊網格單元可以對網格單元中內容進行編輯。

  Private Sub MSFlexGrid1_DblClick()
   If MSFlexGrid1.Row > 0 And MSFlexGrid1.Col = 0 Then MSFlexGrid1_KeyPress 13
   End Sub

文本框起輸入編輯框的作用,模擬網格單元,輸入到文本框的內容,經過處理送到網格中,當輸入完後按回車鍵可以自動到下一列,若為最後一列,跳轉到下一行的第一列等待輸入。

  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 (中文企業版)下運行通過,實現了對MSFlexGrid網格單元的輸入編輯。當然還可以添加一些代碼完成對一些擊鍵的響應,如按Tab自動到下一列,按Ese鍵取消輸入等,這都很容易做到,在此不再敘述。如果您使用VB6.0 (中文企業版),還可以用MSHFlexGrid控件來完成編輯輸入的功能。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved