- 締切済み
VBL ListBoxをテーブルに
VBでListBoxを使ってテーブルのようにして以下のことをしたいのですがうまくいきません 1:列1の幅と列2の幅を個々で固定させ、文字数が列幅を超える場合、文字を折り返して表示 2:を追加していった時ListBoxの表示領域数を超えたら垂直スクロールバーを上下させ全表示 列1 列2 ------------------------ aaaaaa 123 ------------------------ bbbbbbbbbbbbbb bbbbbb 222 bbbbb ------------------------ cccccc 454 ------------------------ 1はイメージ的にはこんな感じです ListBoxをテーブルのようにするにはURLを参考にしました。 http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=JA-JP&k=k%28SYSTEM.WINDOWS.FORMS.LISTBOX.MULTICOLUMN%29&rd=true 説明が分かりにくくてすいません
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
MultiColumnでは無理ですよ これは縦に並びきらない項目を水平方向に列として表示していくためのものです ご希望の表示形式にしたいのであれば DrawItemとMeasureItem を記述することになります MeasureItemで項目の高さを計算して DrawItemで実際の描画を行います またListBoxのDrawModeを『OwnerDrawVariable』に変更します 表示を見ながら ListBoxのItemHeightを調整したほうがいい場合あるでしょう MeasureItemイベントで dim tx() as String = listBox1.Items( e.Index ).Split(",") dim ss() as String = tx(0).Split(vbcrlf) ' 改行があるならその回数で高さを調整 if ss.Length > 1 then e.ItemHeight *= ss.Length end if '文字の長さによる調整 for each s as string in ss ' > 25の数値は適宜修正してください if s.Length > 25 then e.ItemHeight += listBox1.ItemHeight end if next DrawItemイベントで if e.Index > -1 then dim tx() as string = listbox1.items(e.Index).split(",") dim g as Graphics = e.Graphics dim rc as Rectangle = e.Bounds dim rc1, rc2 as Rectangle rc1 = rc : rc2 = rc rc1.width = 217 rc2.X = 218 rc2.width = rc.width - rc2.X ' 選択されている場合の背景の描画 if ( e.state and DrawItemState.Selected) = DrawItemState.Selected then g.FillRectangle( Brushes.Blue, rc ) else g.FillRectangle(New SolidBrush(ListBox1.BackColor), rc ) end if g.DrawString(tx(0), ListBox1.Font, Brushes.Black, rc1 ) g.DrawString(tx(1), ListBox1.Font, Brushes.Black, rc2 ) e.DrawFocusRectangle() end if といった具合です