• 締切済み

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 説明が分かりにくくてすいません

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

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 といった具合です

関連するQ&A