DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

ListViewの列の幅を自動調節する

リストビューコントロールが詳細表示となっている時、列の幅をすべての項目のテキストが欠けることなく表示できる必要最低限の大きさに調節するには、その列のColumnHeaderオブジェクトのWidthプロパティをマイナスの値に設定します。

項目のテキストに基づいて自動調節する

次の例では、リストビューコントロールListView1のすべての列の幅を自動調節しています。(下図のようになります。)

ColumnHeader.Width=-1

VB.NET
コードを隠すコードを選択
Dim ch As ColumnHeader
For Each ch In ListView1.Columns
    ch.Width = -1
Next ch
C#
コードを隠すコードを選択
//ListView1のすべての列を自動調節
foreach (ColumnHeader ch in ListView1.Columns)
{
    ch.Width = -1;
}

項目とヘッダのテキストに基づいて自動調節する

ColumnHeaderオブジェクトのWidthプロパティに-2を設定すると、項目のテキストだけでなく、列ヘッダのテキストの長さも考慮して自動調節されます。さらに、ヘッダの幅がリストビューの幅より短い時は、リストビューの幅いっぱいになるように調節されます。(下図のようになります。)

ColumnHeader.Width=-2

VB.NET
コードを隠すコードを選択
Dim ch As ColumnHeader
For Each ch In ListView1.Columns
    ch.Width = -2
Next ch
C#
コードを隠すコードを選択
//ListView1のすべての列を自動調節
foreach (ColumnHeader ch in ListView1.Columns)
{
    ch.Width = -2;
}

なおこれら方法は、新しく項目が追加された時や、項目のテキストが変更された時に、自動的に列の幅が調節される訳ではありませんので、適当なタイミングで上記のような処理を行う必要があります。

.NET Framework 2.0以降で、ListView.AutoResizeColumnメソッドなどを使用する

.NET Framework 2.0以降では、ListView.AutoResizeColumn、AutoResizeColumnsメソッドを使用して列の幅の自動調節を行うことができます。AutoResizeColumnメソッドはColumnを指定して、自動調節します。AutoResizeColumnsはすべての列を自動調節します。

さらに、ColumnHeader.AutoResizeメソッドを使っても同じように列の自動調整を行えます。

これらのメソッドでは、ColumnContentかHeaderSizeを指定できますが、これは上記で紹介したWidthに-1を設定するか、-2を設定するかという違いと同じです。

以下の例では、ListView1のすべての列の幅を項目とヘッダのテキストで自動調節しています。

VB.NET
コードを隠すコードを選択
'ListView1のすべての列を自動調節
ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize)
C#
コードを隠すコードを選択
//ListView1のすべての列を自動調節
ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
  • 履歴:
  • 2007/1/15 「.NET Framework 2.0以降で、ListView.AutoResizeColumnメソッドなどを使用する」を追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。