リストビューコントロールが詳細表示となっている時、列の幅をすべての項目のテキストが欠けることなく表示できる必要最低限の大きさに調節するには、その列のColumnHeaderオブジェクトのWidthプロパティをマイナスの値に設定します。
次の例では、リストビューコントロールListView1のすべての列の幅を自動調節しています。(下図のようになります。)
Dim ch As ColumnHeader For Each ch In ListView1.Columns ch.Width = -1 Next ch
//ListView1のすべての列を自動調節 foreach (ColumnHeader ch in ListView1.Columns) { ch.Width = -1; }
ColumnHeaderオブジェクトのWidthプロパティに-2を設定すると、項目のテキストだけでなく、列ヘッダのテキストの長さも考慮して自動調節されます。さらに、ヘッダの幅がリストビューの幅より短い時は、リストビューの幅いっぱいになるように調節されます。(下図のようになります。)
Dim ch As ColumnHeader For Each ch In ListView1.Columns ch.Width = -2 Next ch
//ListView1のすべての列を自動調節 foreach (ColumnHeader ch in ListView1.Columns) { ch.Width = -2; }
なおこれら方法は、新しく項目が追加された時や、項目のテキストが変更された時に、自動的に列の幅が調節される訳ではありませんので、適当なタイミングで上記のような処理を行う必要があります。
.NET Framework 2.0以降では、ListView.AutoResizeColumn、AutoResizeColumnsメソッドを使用して列の幅の自動調節を行うことができます。AutoResizeColumnメソッドはColumnを指定して、自動調節します。AutoResizeColumnsはすべての列を自動調節します。
さらに、ColumnHeader.AutoResizeメソッドを使っても同じように列の自動調整を行えます。
これらのメソッドでは、ColumnContentかHeaderSizeを指定できますが、これは上記で紹介したWidthに-1を設定するか、-2を設定するかという違いと同じです。
以下の例では、ListView1のすべての列の幅を項目とヘッダのテキストで自動調節しています。
'ListView1のすべての列を自動調節
ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize)
//ListView1のすべての列を自動調節
ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。