DOBON.NET DOBON.NETプログラミング掲示板過去ログ

リストビューの背景について・・・

環境/言語:[vb .net]
分類:[.NET]

いつもお世話になっています。
リストビューの背景を一行ごとに変えて(二色)しま模様にしたいのですが何かいい方法がありましたらご教授お願いします」。
> リストビューの背景を一行ごとに変えて(二色)しま模様にしたいのですが何かいい方法がありましたらご教授お願いします」。

カスタムドローについて調べてみてください。
> カスタムドローについて調べてみてください。

うーむ、VB6と勘違いされてるような。。。(^^;
#「リストビューの背景」だけで反応してしまったのかな?

というわけでListViewItem.BackColorというそのものがありますです。
渋木宏明(ひどり)さん、レスありがとうございます。
カスタムドローについて調べてみたところ、そう簡単にはいけそうもありませんね?

まどかさん、レスありがとうございます。ListViewItem.BackColorは行ごとに違う色を設定することができるのですか?又、順番を入れ替えたときにしま模様がしま模様でなくなったり・・・

勉強不足で本当にすみません m(..')m。
#某イベントから帰宅

> ListViewItem.BackColorは行ごとに違う色を設定することができるのですか?又、順番を入れ替えたときにしま模様がしま模様でなくなったり・・・

そのとおり。
交互に色を設定するプロシージャを作っておき適宜呼び出してください。

裏で自動でとなると、ListViewItemCollectionクラスを継承して
アイテムの追加削除を通知するカスタムイベントを実装して親フォームが処理、
または色の設定も含めて実装
のどちらかでしょう。

ただし並べ替えを考慮するとさらに面倒なことをする必要がありますかね。
#ColumnClickの考慮だけでいいかな?
え?
>
> 交互に色を設定するプロシージャを作っておき適宜呼び出してください。
>
> 裏で自動でとなると、ListViewItemCollectionクラスを継承して
> アイテムの追加削除を通知するカスタムイベントを実装して親フォームが処理、
> または色の設定も含めて実装
>
そんな事できるのですか?
どういう方法か検討もつかないので調べてみたいと思いますのでこの記事はもう少し未解決のままにさせておいて下さい。
> そんな事できるのですか?

自動という言葉のことだと思いますが、親が色の設定をするだけでよいという継承コンポーネントを作るということです。
ListViewItemCollectionを継承して、AddやRemoveなどアイテムの数に変化のあるメンバすべてをオーバーライドして
#Addは継承した自分を返すのでShadowかな?
その中で色の再設定をおこなうことになるかと思います。
またListViewも継承してItemsを前記のクラスを返すようにしなければなりません。
目的にしては対価が大きいでしょう。
したがって、親がアイテムの追加削除をすべて把握できるなら
最初に書いたように色を設定するプロシージャを呼び出すほうが簡単です。
> うーむ、VB6と勘違いされてるような。。。(^^;

何故ですか?
Windows Forms でもカスタムドローは動作しますよ?

> カスタムドローについて調べてみたところ、そう簡単にはいけそうもありませんね?

WndProc をオーバーライドして、NM_CUSTOMDRAW 通知に適切な応答を返すだけです。
低レベルな実装なので、ソートなどの処理の影響も受けません。
>>うーむ、VB6と勘違いされてるような。。。(^^;
>
> 何故ですか?
> Windows Forms でもカスタムドローは動作しますよ?

ですね。。。
BackColorが実装されたのでする必要がないというか頭からきれいさっぱり消えていました。

自動ということではメッセージフックでいけますね。
ていうか、VB6でまさに今回の機能を持ったカスタムコントロール作ってました。(--;

あとはフックという実装をするべきかどうかですね。
皆さん、ありがとうございます。
なんとなく方法は分かったような気がします(^^)v
今後も又何かありましたらよろしくお願いします。

DOBON.NET | プログラミング道 | プログラミング掲示板