网格控件:利用微软网格Control控件进行编辑输入

  Visual Basic中提供了许多标准Control控件和定制Control控件个Control控件都可以提供组特殊用户界面和编程能力充分利用每个Control控件特性和思路方法可以使编程工作更加容易、简单

  微软网格Control控件MSFlexGrid是个定制Control控件使用微软网格Control控件可以按行列顺序显示正文、数字和图片就象电子表格网格高度、宽度和其它特性都可以进行调整而且网格行和列可以单个地或成组地进行操作MSFlexGridControl控件对包含在内单元内容可进行分类、合并以及格式化并且可以和数据库Control控件相绑定MSFlexGridControl控件具有50多种属性比其它网格Control控件功能更强大灵活性更强

  但是MSFlexGridControl控件同其它Grid网格Control控件用户不能编辑网格单元中内容在要求对其内容进行修改时这可能是个缺陷虽然可以对DBGridControl控件进行编程完成编辑功能但其功能不如MSFlexGrid强大当在录入工作量比较大时如果利用MSFlexGrid进行输入代替Text或其它Control控件从而避免了界面反复刷新和不断地操作按钮录入速度和效率会得以大大提高

  在应用中使用 MSFlexGrid 的前应先将 MSFlxGrd.ocx 文件添加到工程中

  实现编辑网格单元方案

  为了仅仅要求实现能够对网格单元进行输入可以在MSFlexGridKeyPress事件中加入以下代码但是修改编辑输入后内容还十分困难

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


  另外种思路方法是文本框和网格相结合用户编辑操作文本框中内容操作完后移至网格单元中在这个过程中应该实现以下几个功能:

  (1)文本框能准确定位和待编辑网格单元相重合(2)平时文本框不显示当进行编辑操作时显示(3)在输入完行后能自动判断并加新行(4)按回车键确认并自动到下列(5)双击网格单元可显示文本框进行编辑(6)文本框消失后把文本框内容移到网格单元中

  编辑网格单元具体实现

  建立个新工程在Form1上添加Control控件 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, Sht 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 (中文企业版)还可以用MSHFlexGridControl控件来完成编辑输入功能

Tags:  activex控件 微软图表控件 微软的xenroll控件 网格控件

延伸阅读

最新评论

发表评论