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?appI …
説明が分かりにくくてすいません
A 回答 (1件)
- 最新から表示
- 回答順に表示
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Visual Basic(VBA) Vba テキストボックスの文字列をボタンで入力するとテキストボックスの端の文字列が更新されない 2 2022/05/21 23:32
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- 政治 私の発明した「二階建て漢字」は使えるでしょうか? 3 2023/02/08 16:40
- Excel(エクセル) <スプレッドシート>IF関数の複数条件について 5 2022/10/27 14:38
- Access(アクセス) AccessVBAで任意の複数リンクテーブルをAccessVBAを動かす際に削除したいと考えておりま 1 2022/11/17 15:45
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- SQL Server SQL Oracle serverにって質問です。 会社テーブルがあり、そのテーブルから 社員名、給 4 2022/05/21 12:22
- Excel(エクセル) エクセルにおいてセル内の文字を出来るだけ大きく表示する方法を教えてください。 4 2022/07/30 08:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
共有フォルダの「共有のアクセ...
-
文字列の中からある文字の個数...
-
VB.netである関数を呼んで、そ...
-
C言語で10行10列の行列式の値を...
-
VBA public変数はどのようなこ...
-
String型の値にスラッシュをつ...
-
C言語のサフィックスについて
-
VB.NETでのイベントの途中終了
-
レコードセットにnullの場合
-
C#のループでtextboxに値を入れ...
-
エクセルVBAでテキストボッ...
-
チェックボックスを操作できな...
-
Excel ユーザーフォームで計算 ...
-
Excel VBAでsub,dimは何の略?
-
テキストボックスかラベル上の...
-
VBAで入力数値について
-
三項でたとえば交換って
-
FlexGridで文字色を変更。
-
C++のActiveX DLLでポインタを...
-
他のフォームから別のフォーム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
リストビューの列ヘッダーの幅...
-
共有フォルダの「共有のアクセ...
-
文字列を繰り返して表示する VBA
-
構造体のコピー
-
C言語で10行10列の行列式の値を...
-
ディレクトリ以下のファイル・...
-
VBL ListBoxをテーブルに
-
VB6で変数の配置転換
-
文字列の中からある文字の個数...
-
VB.netである関数を呼んで、そ...
-
tranlate関数で特定の文字を取...
-
三項でたとえば交換って
-
VBA public変数はどのようなこ...
-
C#のループでtextboxに値を入れ...
-
VBAでcallで呼び出したsubを終...
-
他のフォームから別のフォーム...
-
C言語のサフィックスについて
-
レコードセットにnullの場合
-
エクセルVBAでテキストボッ...
-
Functionの戻り値を配列にした...
おすすめ情報