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

ListViewコントロールにプログレスバーを描画するには

環境/言語:[.NET1.0 C# ]
分類:[.NET]

お世話になっております。

ListViewコントロールのサブ項目に、プログレスバーのようなメーターを描画したいと思っています。

コントロールのOnPaintをオーバーライドして実現させようとも思いましたが、行の増加やサブ項目のセル位置・幅が変動することも考慮すると容易ではないと思い、別の方法を探しております。

良い実現方法がありましたら、ご教授いただければ幸いです。
> コントロールのOnPaintをオーバーライドして実現させようとも思いましたが、行の増加やサブ項目のセル位置・幅が変動することも考慮すると容易ではないと思い、別の方法を探しております。

「カスタムドロー」または「Custom Draw」をキーワードにして、MSDN Library や検索エンジンなどで検索してみてください。
> ListViewコントロールのサブ項目に、プログレスバーのようなメーターを描画したいと> コントロールのOnPaintをオーバーライドして実現させようとも思いましたが、行の増> 良い実現方法がありましたら、ご教授いただければ幸いです。

オーナードローもいいですが、ListViewの子としてProgressbarを
追加する方法もあります。ただ、.NET 2.0ではColumnWidthChangedという
イベントがありますが、.NET 1.xにはそれが無いため、少々面倒なところも
あります。書きによい例があります。

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=1309&lngWId=10

上記の例ではTimerを使って、微調整を行っています。
また、やろうと思えば、ListViewのメッセージ処理をすれば
Timerに頼らずともできます。
> オーナードローもいいですが、ListViewの子としてProgressbarを
> 追加する方法もあります。

行数が少ない場合はそれでもいいですが、項目数が多い場合、子コントロールを貼り付ける方法はリソース節約の意味で避けるべきです。

例えば、リストビューの1列目は標準で編集をサポートしていますが、このエディットコントロールは各行すべてに貼り付けられているわけではありません。
早速のご回答を頂き有り難うございます。

なるほど。カスタムドロー、コントロールの埋め込みという手法があるのですね。
状況に応じて適切な方法を用いる事により、プログラミングの幅を広げられそうです。

貴重なお時間を割いて頂いたおかげで、大変勉強になりました。
どうも、有り難うございました。
解決済み!

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