微软网格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控件来完成编辑输入功能
最新评论