
No.2ベストアンサー
- 回答日時:
1. MeasureItemイベントで文字数から必要な矩形を計算し、e.ItemWidthとe.ItemHeightに設定
2. DrawItemイベントで、e.Bounsに指定された矩形に文字列を描画
この2点がポイントになります。
回答の正誤確認のためコードを書いたのでそのまま載せておきます。各項目の高さが分かるように枠を描画しています。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ListBox1.DrawMode = Windows.Forms.DrawMode.OwnerDrawVariable
ListBox1.Items.Add("aaa")
ListBox1.Items.Add("abcdefghijklmnopqrstuvwxyz")
ListBox1.Items.Add("あいうえおかきくけこさしすせそたちつてと")
ListBox1.Items.Add("012345678901234567890123456789")
ListBox1.Items.Add("aaa")
ListBox1.Items.Add("abcdefghijklmnopqrstuvwxyz")
ListBox1.Items.Add("あいうえおかきくけこさしすせそたちつてと")
ListBox1.Items.Add("012345678901234567890123456789")
End Sub
Private Sub ListBox1_MeasureItem(ByVal sender As Object, ByVal e As System.Windows.Forms.MeasureItemEventArgs) Handles ListBox1.MeasureItem
Dim size As System.Drawing.SizeF
e.Graphics.PageUnit = Drawing.GraphicsUnit.Pixel
' ListBoxの幅で固定して高さを計測
size = e.Graphics.MeasureString(ListBox1.Items(e.Index).ToString, ListBox1.Font, ListBox1.ClientSize.Width)
e.ItemWidth = Convert.ToInt32(size.Width)
e.ItemHeight = Convert.ToInt32(size.Height)
End Sub
Private Sub ListBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem
If CBool(e.State And Windows.Forms.DrawItemState.Selected) Then
e.Graphics.FillRectangle(Drawing.Brushes.Blue, e.Bounds)
e.Graphics.DrawString(ListBox1.Items(e.Index).ToString, ListBox1.Font, Drawing.Brushes.White, e.Bounds)
Else
e.Graphics.FillRectangle(Drawing.Brushes.White, e.Bounds)
e.Graphics.DrawRectangle(Drawing.Pens.Pink, e.Bounds)
e.Graphics.DrawString(ListBox1.Items(e.Index).ToString, ListBox1.Font, Drawing.Brushes.Black, e.Bounds)
End If
End Sub

No.1
- 回答日時:
オーナードローを使う必要があると思います。
.NET系なら比較的簡単に出来ますが、VB6/VBAだとWinAPIと格闘することになります。
.NET系でのオーナードロー
http://dobon.net/vb/dotnet/control/lbownerdraw.h …
VB6については過去ログにありました。
http://okwave.jp/qa1637047.html
この回答への補足
回答ありがとうございます!
.NET系なのでオーナードローでできそうです。
ですが、、1行に収まらない場合の改行ができません・・・。
行高さを文字数で変えてみたのですが、行高さのみが変わり、
改行とならず、1行に表示されたままです。
どのようにすればいいのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
リストボックスの特定行の背景色
Visual Basic(VBA)
-
ExcelVBA でリストリストボックスに列見出しをコーディングでつける
Excel(エクセル)
-
-
4
VBAのリストボックスで、横スクロールバーを表示するには?
Visual Basic(VBA)
-
5
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
6
VBA フォームのテキストボックスにセルの値を表示させたいが改行していたら改行もあわせて表示させたい
Excel(エクセル)
-
7
VB6,リストボックスの特定行の色変更は可能?
Visual Basic(VBA)
-
8
エクセルVBAでマルチページの切り替え方法の件で
Excel(エクセル)
-
9
EXCEL VBA リストボックスの列を指定してForeColorを変更する方法について
Excel(エクセル)
-
10
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
11
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
12
C# ListBoxのアイテムをユーザーが直接リネームできるようにすることは可能ですか?
C言語・C++・C#
-
13
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
14
Excel VBA コンボボックスについて
Excel(エクセル)
-
15
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
16
UserForm1.Showでエラーになります。
工学
-
17
コンボボックスの項目中に改行を
Visual Basic(VBA)
-
18
【VBA】【ユーザーフォーム_ListBox】オートフィルタで絞りこんだ値だけを取り出したい
Visual Basic(VBA)
-
19
VBA リストボックスをダブルクリックしデータを修正したいのですが…。
Visual Basic(VBA)
-
20
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ListBoxで改行したい
-
.NETのPictureBoxでウインドウ...
-
アルゴリズム : 円描画
-
色を合成するには
-
エクセルのレーダーチャート 0...
-
PowerPoint の VBA
-
Visual C++ MaskedTextBoxの右...
-
ExcelVBAのコントロールの種類...
-
実行時エラー 438になった時の...
-
VBA シートのボタン名を変更し...
-
クリックイベントなのに、2回ク...
-
eclipseのデバッグ中に変数の値...
-
Microsoft Formsの「個人情報や...
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
【C#/Java?】try-catchでcatch...
-
Wordテキストコントロールが未...
-
Form_Load と Form_Activate の...
-
共通モジュールでDBへの接続と...
-
VBA ユーザーフォームの Keypre...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ListBoxで改行したい
-
PowerPoint の VBA
-
VC;;6.0のMFCで線を簡単に引け...
-
vb6のTEXTBOX
-
C# DrawImage 物理サイズでな...
-
for文の実行速度を遅くしたいの...
-
Pythonにおける物理のシミュレ...
-
MFCでのコンボボックスについて
-
C#を用いて描画する四角形の角...
-
円の頂点の求め方を知りたいです。
-
win32api複数のタイマーを同時...
-
給紙トレイをダイアログを使わ...
-
エクセルのレーダーチャート 0...
-
VB 6.0 PictureBox のプロパテ...
-
Excel VBA:コントロールボタン...
-
C#で壁の当たり判定と自キャラ...
-
VC++ ドラッグしながらの図の...
-
Word 描画オブジェクトを削除...
-
scilabでのグラフ描画時の軸設定
-
ピクチャーボックスでの折線グ...
おすすめ情報