- 題名: ListViewの一覧表示での列幅の制御
- 日時: 2009/03/03 13:55:18
- ID: 24127
- この記事の返信元:
- (なし)
- この記事への返信:
- [24130] Re[1]: ListViewの一覧表示での列幅の制御2009/03/04 4:31:08
- ツリーを表示
> 簡単にプロパティ設定でできる方法は、私は知りません。 > もし2列目以降の列の幅が固定されているならば、ListViewのクライアント領域の幅から2列目以降の列の幅を引いたものを1列目の幅にすればよいのではないでしょうか。 > 2列目以降を文字列の幅とするならば、とりあえずこれらの列はAutoResizeColumnメソッドなどで自動調節して、その後1列目の幅を計算するという方法でいかがでしょうか。 ありがとうございます。 ヒントいただき、 次のコードでうまく動きました。 Private Sub Form1_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize) Dim WidthSum As Integer = _ ListView1.Columns(1).Width + _ ListView1.Columns(2).Width + _ ListView1.Columns(3).Width + _ ListView1.Columns(4).Width + _ ListView1.Columns(5).Width ListView1.Columns(0).Width = _ ListView1.ClientSize.Width - WidthSum End Sub
更に改造して完璧な動作を目指してみました。 Public Sub SetListViewSpringColumnWidth(ByRef TargetListView As ListView, _ ByRef ResizePriority As Stack) Dim SumWidth As Integer = 0 Dim PopIndex As Integer = 0 If TargetListView.Columns.Count = 0 Then Exit Sub If ResizePriority.Count <> ListView1.Columns.Count Then Exit Sub TargetListView.Columns.Add("") 'ダミー列追加 TargetListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize) While True PopIndex = ResizePriority.Pop SumWidth += TargetListView.Columns(PopIndex).Width If (Not (TargetListView.ClientSize.Width > SumWidth)) _ Or (ResizePriority.Count = 0) Then SumWidth -= TargetListView.Columns(PopIndex).Width TargetListView.Columns(PopIndex).Width = _ TargetListView.ClientSize.Width - SumWidth Exit While End If End While While 1 <= ResizePriority.Count TargetListView.Columns(ResizePriority.Pop).Width = 0 End While TargetListView.Columns.RemoveAt(ListView1.Columns.Count - 1) End Sub Private Sub MainForm_ResizeEnd(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.ResizeEnd Dim ResizePriority As New Stack ResizePriority.Push(0) ResizePriority.Push(1) ResizePriority.Push(2) ResizePriority.Push(3) ResizePriority.Push(4) ResizePriority.Push(5) SetListViewSpringColumnWidth(ListView1, ResizePriority) End Sub リサイズ優先度は呼び出し側のStackで指定しています。 上記ソースの ResizePriorityを ResizePriority.Push(1) ResizePriority.Push(0) ResizePriority.Push(2) の順番に変更すると、 一番最初に、列1が伸びたり縮んだりします。 列1の幅が0になると、次に列0が伸縮し 列0の幅が0になると、次に列2が伸縮します。 ListViewの幅が広くても狭くても、横スクロールバーは出ません。 また、任意列数のListViewに対応しています。 必要な方は、お試しください。
こんにちは。
ListViewでViewをDetailsにして一覧表示にして使っています。
列幅についてなのですがWidth=-1や-2に設定するという方法はわかったのですが
いまひとつ思うような動作をさせることができません。
4列あったとして
|0|1|2|3|
このような形で一覧表示されているところで
ListViewのサイズを広げると
|0 |1|2|3|
と、1,2,3の列は固定幅(文字列の長さから固定幅が計算されるとうれしい)
で、0の列だけが、幅が伸縮するという
形で動作させたいのですが
どのようなコードを書けばよろしいでしょうか?
教えてください。よろしくおねがいします。
簡単にプロパティ設定でできるものではないでしょうか?