ListViewおまじない
ListViewの初期化のコードが冗長でいちいち書くのが面倒なのでプロシージャ化しておいてます。
色々プロパティがあるけどフォントサイズくらいしか変更することないのでフォントサイズだけ。
Sub testListViewおまじない
Call ListViewおまじない(Me.ListView1, FontSize:=12)
End Sub
Sub ListViewおまじない(myListView As ListView, FontSize As Long)
With myListView
.View = lvwReport
.LabelEdit = lvwManual
.HideSelection = False
.AllowColumnReorder = True
.FullRowSelect = True
.Gridlines = True
.Font.Size = FontSize
.Font = "Meiryo UI"
' .CheckBoxes = True
End With
End Sub
TextBoxおまじない
ListViewではないけどTextBoxで折り返し設定するのもこれでやってます。
Sub testTextBoxおまじない
Call TextBoxの設定(Me.TextBox1, True)
End Sub
Sub TextBoxの設定(myTextBox As Variant, 折り返し As Boolean)
With myTextBox
If 折り返し = True Then
.MultiLine = True
.WordWrap = True
End If
End With
End Sub
ListViewのヘッダをクリックしてソートするやつ
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
Call ListViewをクリック列基準でソートする(Me.ListView1, ColumnHeader)
End Sub
Private Sub ListViewをクリック列基準でソートする(myListView As ListView, _
ByVal ColumnHeader As MSComctlLib.ColumnHeader)
'ListViewのカラムクリック時にクリック列基準でソートする
With myListView
.SortKey = ColumnHeader.Index - 1
.SortOrder = .SortOrder Xor lvwDescending
.Sorted = True
End With
End Sub
ListViewの幅をキリよくするやつ
各列幅の合計からキリよくListView全体の幅を調整します。
マジックナンバーが15だったり他の値だったりは環境によりけり?
Private Sub ListViewの列を設定する(myListView As ListView, w非表示列 As Double)
With myListView
With .ColumnHeaders
.Add , "_a", "列a", w非表示列
.Add , "_b", "列b", 300
.Add , "_c", "列c", w非表示列
.Add , "_d", "列d", 400
End With
.Width = GetLV幅の合計(myListView, 15)
End With
End Sub
Private Function GetLV幅の合計(myListView As ListView, w余白 As Double) As Double
Dim ch As ColumnHeader
Dim buf
For Each ch In myListView.ColumnHeaders
buf = buf + ch.Width
Next
GetLV幅の合計 = buf + w余白
End Function
コントロール名の前にいちいちMe
をつけているのはインテリセンスをコントロールに絞るため。
たった3文字で得られるコスパの良さが気に入ってます。