Как правильно рассчитать высоту стола
Как рассчитать высоту таблицы flexgrid в VB6, чтобы она содержала только количество заполненных строк.
В настоящее время
myFlexGrid.Height = (myFlexGrid.CellHeight * myFlexGrid.Rows) ' paraphrased from code
получается примерно 3 пикселя в каждой строке. Добавление в магическое число является немного хакерским и хотел бы сделать это без необходимости прибегать к этому.
Обновление: чтобы усложнить ситуацию, он также должен обрабатывать многострочные ячейки.
3 ответа
RS Coneley близок, но вот правильный способ учета всех настроек DPI:
Me.MSFlexGrid1.Height = Me.MSFlexGrid1.CellHeight _
* (Me.MSFlexGrid1.Rows + Me.MSFlexGrid1.FixedRows) _
+ (Screen.TwipsPerPixelY * 2)
Тебе нужно идти
Me.MSFlexGrid1.Height = (Me.MSFlexGrid1.CellHeight) * (Me.MSFlexGrid1.Rows + Me.MSFlexGrid1.FixedRows) + 30
30 - сделать его на два пикселя длиннее, чтобы показать черную рамку, бегущую вокруг сетки.
Также помогает отключение вертикальной полосы прокрутки.
Это последний код, который я придумал
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 ( см. Здесь, чтобы увидеть как) и значение EM_GETLINECOUNT, но вы должны быть в состоянии сделать это самостоятельно:-)
Он не удаляет магические числа, но рационализирует их, что достаточно близко для меня.