如何计算VB6中flexgrid表的高度,使其仅包含已填充的行数。
目前
myFlexGrid.Height = (myFlexGrid.CellHeight * myFlexGrid.Rows) ' paraphrased from code
每行约3个像素。添加幻数有点hackish并且想要实现这一点而不必诉诸于此。
更新 更复杂的是,它还需要处理多行单元格。
答案 0 :(得分:2)
RS Coneley很接近,但这是解释所有DPI设置的正确方法:
Me.MSFlexGrid1.Height = Me.MSFlexGrid1.CellHeight _
* (Me.MSFlexGrid1.Rows + Me.MSFlexGrid1.FixedRows) _
+ (Screen.TwipsPerPixelY * 2)
答案 1 :(得分:1)
你需要去
Me.MSFlexGrid1.Height =(Me.MSFlexGrid1.CellHeight)*(Me.MSFlexGrid1.Rows + Me.MSFlexGrid1.FixedRows)+ 30
30是让它长两个像素,以显示在flexgrid周围运行的黑色边框。
同样禁用垂直滚动条也有帮助。
答案 2 :(得分:0)
这是我提出的最终代码
For i = 0 To fgrComments.Rows - 1
'Set MSFlexGrid to appropriate Cell
myFlexGrid.Row = i
'Set textbox to match the selected cell
txtSizer.Width = myFlexGrid.ColWidth(2)
txtSizer.Font = myFlexGrid.Font
txtSizer.Text = myFlexGrid.Text
'Call API to determine how many lines of text are in text box
lLinesOfText = SendMessage(txtSizer.hwnd, EM_GETLINECOUNT, 0&, 0&)
' Update the running values
lTotalNumberOfRows = lTotalNumberOfRows + lLinesOfText
lCurrentHeight = lCurrentHeight + myFlexGrid.CellHeight
Next i
' resize the grid
Dim iSpacers As Integer
iSpacers = Screen.TwipsPerPixelY * lTotalNumberOfRows
myFlexGrid.Height = lCurrentHeight + iSpacers
您需要声明SendMessage(see here to see how)和EM_GETLINECOUNT的值,但您应该能够自己执行此操作: - )
它不会移除魔法数字,但它确实合理化了它们,这对我来说足够接近。