none
ListBoxの各行を違った色で表示することは可能ですか? RRS feed

  • 質問

  • またまた初歩的な質問で恐縮します。

    Listboxに表示する項目の種類によって、Forecolorを変えようとしましたが、

    どうしてもできませんでした。そもそも出来ないのでしょうか。

    ご教示ください。

     

    2006年11月12日 7:34

回答

  • 参考までですが、ListViewだと簡単にできます。
    2006年11月12日 8:33
    モデレータ
  • 項目の文字の色を変えたいListBoxをListBox1とします。

    デザイン画面でListBox1を選んで
    プロパティウィンドウで
    DrawMode を探して OwnerDrawFixedにします

    プロパティウィンドウで
    イベント(雷マーク)をクリック
    DrawItemを探しての右のセルをダブルクリックします

    コードに自動で
    ListBox1_DrawItemメソッドが生成されるのでその中に

    Dim brush1 As Brush = New SolidBrush(Color.Red)
    e.Graphics.DrawString(ListBox1.Items(e.Index).ToString(), e.Font, brush1, e.Bounds, StringFormat.GenericDefault)

    Color.Redの部分をe.Index等によって変更すれば項目によって文字色が変わります。

    MSDNライブラリ
    ListBox.DrawItem イベント 
    にもサンプルがあります。

    2006年11月13日 4:47

すべての返信

  • オーナードローをすればできますよ。

    ListBox.DrawMode プロパティ について調べてみてください。
    ヘルプにやりたいことにそっくりなソースが記載されています。

    2006年11月12日 8:19
  • 参考までですが、ListViewだと簡単にできます。
    2006年11月12日 8:33
    モデレータ
  • ありがとうございます。

    お手数をおかけ致しました。早速やってみます。

     

     

    2006年11月12日 15:10
  • ダッチ様

     

    やってみようとしましたが、できませんでした。ownerdrawはListViewの関連だし。

    drawitemのイベントを意図的に起こす方法も判りませんでしたし。

    やっぱり、ListBoxではforecolorを行毎に設定することは不可能なのでしょうか。

    もう少し、詳しく教えてください。お願いします。

     

     

    2006年11月13日 3:50
  • 項目の文字の色を変えたいListBoxをListBox1とします。

    デザイン画面でListBox1を選んで
    プロパティウィンドウで
    DrawMode を探して OwnerDrawFixedにします

    プロパティウィンドウで
    イベント(雷マーク)をクリック
    DrawItemを探しての右のセルをダブルクリックします

    コードに自動で
    ListBox1_DrawItemメソッドが生成されるのでその中に

    Dim brush1 As Brush = New SolidBrush(Color.Red)
    e.Graphics.DrawString(ListBox1.Items(e.Index).ToString(), e.Font, brush1, e.Bounds, StringFormat.GenericDefault)

    Color.Redの部分をe.Index等によって変更すれば項目によって文字色が変わります。

    MSDNライブラリ
    ListBox.DrawItem イベント 
    にもサンプルがあります。

    2006年11月13日 4:47
  • IIJIMAS さん、フォローありがとうございます。

    DrawMode プロパティを OwnerDraw~ にすることでオーナードローが可能になります。
    そして、オーナードローが可能になると DrawItem イベント などオーナードローに必要なイベントが発生するようになるんですよ。

    あとはIIJIMAS さんの内容なヘルプをみれば出来ると思います。

    ヘルプのリンク先を乗せておけばよかったですね。

    2006年11月13日 6:08
  • IIJIMAS さんご教示ありがとうございます。

    やっとわかりました。イベント発生のタイミングが難しいですね。

    あとでまとめて、処理してくるので、itemindexを操作すると変な結果になってしまいました。

    でも、Dim brush1 As Brush = New SolidBrush(Color.Red)
    e.Graphics.DrawString(ListBox1.Items(e.Index).ToString(), e.Font, brush1, e.Bounds, StringFormat.GenericDefault)

    これをやると選択項目を反転することをしなくなってしまったので、これはこれでまた新たな問題が生じて

    しまいました。

     

    2006年11月14日 5:41
  •  窓際族 さんからの引用

    あとでまとめて、処理してくるので、itemindexを操作すると変な結果になってしまいました。

    具体的に教えてください。

     窓際族 さんからの引用

    これをやると選択項目を反転することをしなくなってしまったので、これはこれでまた新たな問題が生じて

    しまいました。

    DrawStringの前の行で

    e.DrawBackground()もしてください。

     

    2006年11月14日 5:52
  • 自分へ。

    drawrectangleを使うからいけないんですね。drawbackcolorで十分でした。

     

    とてもご親切にいろいろ教えてくださってありがとうございました。

     

    2006年11月14日 6:49