问题一:MSFlexGrid内容显示不全
解决方法:让MSFlexGrid的大小根据字段的大小自动调节
Public Sub AdjustColWidth(frmCur As Form, gridCur As Object, Optional bNullRow As Boolean = True, Optional dblIncWidth As Double = 0)
'--------------------------------------------------------------------
'功能:
' 自动调整Grid各列列宽为最合适的宽度
'参数:
' [frmCur].........................................当前工作窗体
' [gridCur]........................................当前要调整的Grid
'--------------------------------------------------------------------
Dim i, j As Integer
Dim dblWidth As Double
With gridCur
For i = 0 To .Cols - 1
dblWidth = 0
If .ColWidth(i) <> 0 Then
For j = 0 To .Rows - 1
If frmCur.TextWidth(.TextMatrix(j, i)) > dblWidth Then
dblWidth = frmCur.TextWidth(.TextMatrix(j, i))
End If
Next
.ColWidth(i) = dblWidth + dblIncWidth + 100
End If
Next
End With
End Sub
这是自动调节列宽的函数,所以在使用的过程中要调用
Call AdjustColWidth(frmstudentcheckpay, myflexgrid)
注意:MSFlexGrid的字体大小要与窗体的字体大小相同
问题二:累计添加记录,没有刷新
解决方法:每次添加记录都从第二行开始,因此单击事件后的数据会覆盖上次的记录
设置初始行为1,进行下面的循环,就会使记录从第二行开始添加
总结:这两个问题看起来很简单,但刚开始解决用了很长时间,主要是败在了战略问题上,有句话不是叫做“知己知彼才能百战不殆”,刚开始遇到问题就去盲目地查,结果还是没有解决问题,其实首先应该先去了解MSFlexGrid的属性、方法等,知道了它的用法,才能更好地去解决问题,所以我总结了一下关于MSFlexGrid控件相关知识。
主要属性:
(1)Rows与Cols属性:分别用于设置或返回MSFlexGrid控件的行数与列数。
(2)Row与Col属性:分别用于设置或返回MSFlexGrid控件中活动单元的行号与列号。
(3)TextMatrix属性:该属性用于表示MSFlexGrid控件中单元格的内容。
格式为:TextMatrix (Row, Col);
其中Row与Col分别表示单元格在MSFlexGrid控件中的行号与列号。
(4)FixedRows属性:用于设置表格显示过程中固定不变的行数。如FixedRows=1,则表示固定行为1
(5)FixedCols属性:用于设置表格中固定不变的列数。如FixedCols=1,则表示固定列为1
(6)MouseRow与MouseCol属性:用于返回鼠标光标所在单元格的行号与列号。
(7) ColWidth(Col)、RowHigh(Row)属性:用于设置与返回第Col列的宽度与第Row行的高度,例如设置第0列的 宽度为1500,第0行的高度为300的赋值语句为:
ColWidth(0) = 1500
RowHeight(0) = 300
(8)DataSource属性:用于选择数据表,只能通过Data数据源控件选择数据表。
说明,若要用ADO Data控件作为数据源,则应使用MSHFlexGrid控件。
主要方法:
.RemoveItem(在MSFlexGrid控件中删除一行)
.AddItem(在MSFlexGrid控件中添加一个新行)
.clear(清除MSFlexGrid控件所有单元格中内容)
.Refresh(刷新内容)
.setFocus(获得焦点)
主要事件:
KeyPress事件:当用户按下或释放任何一个ANSI键(字母或数字等键)时触发
KeyDown事件:当用户按下一个键时触发
KeyUp事件:当用户放开任何一个键时触发
MouseUp事件:当用户放开鼠标时触发。
MouseDown事件:当用户按下鼠标触发
EnterCell与LeaveCell事件:在进入一个单元格时触发EnterCell事件,在离开一个单元格时触发LeaveCell事件