• 締切済み

C# リストビューの特定のセルの特定文字色を変更

C#のリストビューの特定のセルの中の特定の文字の色を変えたいと思っています。 例えばリストビューの4行目の2列目の中に「INTEGER」という文字列が入れこまれていたら、「EGER」の色だけ赤く変えるということをやりたいのです。 リストビュー全体の文字色、あるいはリストビューの中の特定のセルの文字色を変えるやり方は色々ありましたが、さらにその中の特定の文字だけの色を変えるやり方はどこを探しても見つからなかったので質問させていただきました。 分かる方がいらっしゃいましたら、ご享受のほど、よろしくお願いします。

みんなの回答

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

>う~ん、ちょっとその方法ですと、色々問題が発生しそうです。。 軽く試した範囲だと…難しそうでしたかね。 比較用に1行目のものだけオーナードローしています。 1)描画時のY座標位置が標準描画(2行目)と異なる。  上に寄っています。 2)"INT"の描画時のX座標が異なる。  なのにMeasureStringメソッドで取得した幅の分ずらすと"EGER"の位置は揃う。 DrawDefaultせずに該当の列(SubItem)を全部自前でDrawStringメソッドで描画すれば…ある程度は揃えられるとは思われますが。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

オーナードローでちまちま描画していくしかないんじゃないですかね。 http://msdn.microsoft.com/ja-jp/library/system.windows.forms.listview.drawsubitem%28v=vs.110%29.aspx 引数で渡されるDrawListViewSubItemEventArgs型からある程度の情報は得られます。 http://msdn.microsoft.com/ja-jp/library/system.windows.forms.drawlistviewsubitemeventargs%28v=vs.110%29.aspx ColumnIndexプロパティで列の位置が、SubItemプロパティ経由でTextプロパティで描画すべき文字列が。 Graphicsプロパティ経由のMeasureStringメソッドで描画する場合のサイズが。 # "INT"でサイズ計算すれば、続きの"EGER"の描画開始座標が算出可能でしょう。 # ただし…ベースラインがズレるかも知れませんけど。 # ベースラインとはなんぞや?という場合は「フォント ベースライン」辺りで検索してください。 文字列の描画はGraphicsプロパティ経由のDrawStringメソッドで。 通常描画をOSに任せる場合はDrawDefaultプロバティを設定してそのままreturnしてしまえばOKでしょう。 面倒なのは…フォーカスが当たっているとき、選択されている時などの状態の時ですかね。

wakaminmin
質問者

お礼

う~ん、ちょっとその方法ですと、色々問題が発生しそうです。。 やはり難しいことしなきゃいけないみたいですね…。 また違うやり方を考えてみたいと思います。 ありがとうございました。