
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で質問しましょう!
似たような質問が見つかりました
- gooブログ 記事の下にスクロールバーが表示される 2 2022/08/19 20:42
- その他(プログラミング・Web制作) マウスオーバー→ホイール回転でスクロールできない 2 2022/10/31 10:06
- Visual Basic(VBA) 【Excel VBA】条件に合った行の表示・非表示を行う方法 3 2023/03/18 12:31
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/09 10:07
- Excel(エクセル) エクセルの数式で教えてください。 5 2023/02/10 15:11
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/04/21 08:59
- Word(ワード) Word2013 縦書き上下二段の表、改行を続けると次ページに情報が表示されるようにしたい 3 2022/06/16 09:24
- Excel(エクセル) セル内で自分の好きなところで改行したいのですが、数式が入って無理なんです。 「折り返して全体表示」し 4 2022/05/15 18:50
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 1 2022/06/18 21:20
このQ&Aを見た人はこんなQ&Aも見ています
-
いちばん失敗した人決定戦
あなたの「告白」での大失敗を教えてください。
-
ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
ゴリラ向け動画配信サイト「ウホウホ動画」にありがちなことを教えて下さい。
-
最速怪談選手権
できるだけ短い文章で怖がらせてください。
-
ゆるやかでぃべーと タイムマシンを破壊すべきか。
[状況]これはディベートの論題だと仮定したうえでの回答お願いします。
-
かっこよく答えてください!!
あなたは今にも別れそうなカップルの彼女の恋愛相談に乗っています。
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
VB6,リストボックスの特定行の色変更は可能?
Visual Basic(VBA)
-
-
4
UserForm1.Showでエラーになります。
工学
-
5
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
6
リストボックスの特定行の背景色
Visual Basic(VBA)
-
7
コンボボックスの項目中に改行を
Visual Basic(VBA)
-
8
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
9
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
10
ExcelVBA でリストリストボックスに列見出しをコーディングでつける
Excel(エクセル)
-
11
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
12
Excel VBA コンボボックスについて
Excel(エクセル)
-
13
VBAのリストボックスで、横スクロールバーを表示するには?
Visual Basic(VBA)
-
14
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
-
15
エクセルVBAでマルチページの切り替え方法の件で
Excel(エクセル)
-
16
VBA フォームのテキストボックスにセルの値を表示させたいが改行していたら改行もあわせて表示させたい
Excel(エクセル)
-
17
Excelの入力規則で2列表示したい
Excel(エクセル)
-
18
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
19
アクセスのフィールド表示を2段にする方法・抽出の方法
Access(アクセス)
-
20
複数選択のListBoxでClickイベントが拾えません
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#を用いて描画する四角形の角...
-
ListBoxで改行したい
-
Word 描画オブジェクトを削除...
-
c言語 ちらつき
-
ピクチャーボックスでの折線グ...
-
花火のアルゴリズム
-
VB2010のChartで、何本もの線を...
-
図の削除直後の再描画
-
MFCでのコンボボックスについて
-
COLORREF color の反転色
-
VB.netで図形描画ができません^^;
-
.net chartでの積層棒グラフの...
-
for文の実行速度を遅くしたいの...
-
VC++ MFCチェックボックスの色...
-
PowerPoint の VBA
-
エクセルのレーダーチャート 0...
-
VBA シートのボタン名を変更し...
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 438になった時の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ListBoxで改行したい
-
for文の実行速度を遅くしたいの...
-
C#を用いて描画する四角形の角...
-
PowerPoint の VBA
-
ビットマップに描画をしてピク...
-
win32api複数のタイマーを同時...
-
給紙トレイをダイアログを使わ...
-
.NETのPictureBoxでウインドウ...
-
VB.netで図形描画ができません^^;
-
delphi 画面のちらつき
-
C# DrawImage 物理サイズでな...
-
図の削除直後の再描画
-
VC++ MFCチェックボックスの色...
-
MFCでのコンボボックスについて
-
フォームに描画して表示をスク...
-
Word 描画オブジェクトを削除...
-
円の頂点の求め方を知りたいです。
-
DrawLineで引いた線が消えてし...
-
コンボボックスのテキストを消...
-
vb6のTEXTBOX
おすすめ情報