Dear All,
Below is the code I use to resize ListViews. Can anyone suggest any improvements?
Andy
"Logic is invincible because in order to combat logic it is necessary to use logic." -- Pierre Boutroux
"Why does my program keep showing error messages every time something goes wrong?"
Below is the code I use to resize ListViews. Can anyone suggest any improvements?
Code:
Public Sub ResizeListView(lvwTarget As ListView)
Const cstrRoutineName As String = "ResizeListView"
Const cintX As Integer = 180, _
cintC As Integer = 240
Dim frmX As Form
Dim intC As Integer, _
intR As Integer, _
intW As Integer, _
intS As Integer
Dim blnB As Boolean, _
blnI As Boolean, _
blnS As Boolean, _
blnU As Boolean
On Error GoTo ErrExit
With lvwTarget
' Check parent object is a form
If Not (TypeOf .Parent Is Form) Then GoTo ErrExit
' Set reference to parent form to use TextWidth
Set frmX = .Parent
' Save font settings
blnB = frmX.Font.Bold
blnI = frmX.Font.Italic
intS = frmX.Font.Size
blnS = frmX.Font.Strikethrough
blnU = frmX.Font.Underline
' Get font settings from ListView
frmX.Font.Italic = .Font.Italic
frmX.Font.Size = .Font.Size
frmX.Font.Strikethrough = .Font.Strikethrough
frmX.Font.Underline = .Font.Underline
' Loop through columns
For intC = 1 To .ColumnHeaders.Count
' Set font settings
frmX.Font.Bold = .Font.Bold
' Get width of column header
.ColumnHeaders(intC).Tag = frmX.TextWidth(.ColumnHeaders(intC).Text)
' Loop through rows
For intR = 1 To .ListItems.Count
' Is this the Text column?
If intC = 1 Then
' Yes - get Bold property
frmX.Font.Bold = .ListItems(intR).Bold
' Get width of .Text
intW = frmX.TextWidth(.ListItems(intR).Text)
' Is Text wider than any before?
If intW > .ColumnHeaders(intC).Tag Then
' Yes - Save width
.ColumnHeaders(intC).Tag = intW
End If
Else ' Not text column
' Get Bold setting again
frmX.Font.Bold = .Font.Bold
' Get width of SubItem
intW = frmX.TextWidth(.ListItems(intR).SubItems(intC - 1))
' Is SubItem value wider than any before?
If intW > .ColumnHeaders(intC).Tag Then
' Yes - Save Width
.ColumnHeaders(intC).Tag = intW
End If
End If ' Text or Subitem
' Next Row
Next intR
' Is this the first column, and are Checkboxes enabled?
If intC = 1 And .CheckBoxes = True Then
' Yes checkboxes enabled - add fudge
.ColumnHeaders(intC).Tag = .ColumnHeaders(intC).Tag + cintC
End If
' Add fudge to column width
.ColumnHeaders(intC).Width = .ColumnHeaders(intC).Tag + cintX
Next intC
' Restore font settings
frmX.Font.Bold = blnB
frmX.Font.Italic = blnI
frmX.Font.Size = intS
frmX.Font.Strikethrough = blnS
frmX.Font.Underline = blnU
' Release reference to parent form
Set frmX = Nothing
End With ' lvwTarget
' Return
ErrExit:
End Sub
Andy
"Logic is invincible because in order to combat logic it is necessary to use logic." -- Pierre Boutroux
"Why does my program keep showing error messages every time something goes wrong?"