1. VB msflexgrid列寬可以隨內容自動變化嗎 如何做到
如果行高是自動的,那麼是根據font大小會自動調整。經過試驗,在各種font大小情況下,行高總是大約等於一個西文字元寬度的2.2倍。
根據這個情況,你可以先取得某列中每單元格的字元長度(用StrConv 計算中英文混合字串的長度,中文算2個),然後根據其中最長的長度,再根據行高RowHeight值,計算出一個近似的列寬ColWidth,然後設置它。
2. VB中DataGrid控制項如何根據欄位內容自動調整列寬度
思路:先獲取列中欄位最大寬度,再設置DataGrid當前列的寬度。
用循環一列一列的設置,
for i = 0 to datagrid1.colums.Count
for j = 0 to datagrid1.Rows.Count
……比較Len,找到最大,賦值
next
next
............................
先定義一個Sub過程AutoSizeCol,用來調整Datagrid中的列寬。
Public Sub AutoSizeCol(ByVal col As Integer) 』當前列
Dim width As Single
width = 0
Dim numRows As Integer
numRows = CType(dataGrid1.DataSource, DataTable).Rows.Count 『當前列的行數
Dim g As Graphics
g = Graphics.FromHwnd(dataGrid1.Handle)
Dim sf As StringFormat
sf = New StringFormat(StringFormat.GenericTypographic)
Dim size As SizeF
Dim i As Integer
i = 0
Do While (i < numRows)
size = g.MeasureString(dataGrid1(i, col).ToString, dataGrid1.Font, 500, sf)
If (size.Width > width) Then
width = size.Width 』得到字元最多的行的字元數
End If
i = (i + 1)
Loop
g.Dispose()
dataGrid1.TableStyles("customers").GridColumnStyles(col).Width = CType(width, Integer)
'應用到列
End Sub
下面就可以表格內容來定義整張表所有列的寬度了。
Public Sub AutoSizeTable()
Dim numCols As Integer
numCols = CType(dataGrid1.DataSource, DataTable).Columns.Count
Dim i As Integer
i = 0
Do While (i < numCols) '循環每一列
AutoSizeCol(i) 『調用上面的函數
i = (i + 1)
Loop
End Sub
(轉並注釋) <br>