机房收费系统中有很多查询记录类的窗体用到了MSHFlexGrid控件。当没有调整该控件的大小时,查询结果可能会如图所示:
而我们需要的是:
这本来是一个很简单的调整MSHFlexGrid列宽的问题,只需要设置AllowUserResizing即可,如图:
但是我刚开始没有注意到这个属性,所以就百度了自动调整MSHFlexGrid列宽的方法,需要自定义一个过程:
Public Sub AdjustColWidth(frmCur As Form, gridCur As Object, Optional bNullRow As Boolean = True, Optional dblIncWidth As Double = 0)
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(frmLineHis, myFlexGrid)
这个过程的关键就是要知道form窗体有TextWidth方法, Textwidth方法则返回一个文本字符串的宽度值。
因为知道了Textwidth方法,我们就能使任何输入内容为文本字符类控件自动调节到最适合宽度,因为还有TextHeight方法,我们就能调整任何输入内容为文本字符类控件自动调节到最适合高度。我们知道label控件有AutoSize属性,而把上述代码封装起来就是输入内容为文本字符类控件的AutoSize属性。
问题虽小,但是有一个从特殊到一般的思考过程。任何问题都能归类,任何解决问题的方法提升后都能解决一类问题!
*自动调整MSHFlexGrid各列列宽为最合适的宽度参考文章:
http://li25686686.blog.163.com/blog/static/3684873720105644729263/