- PR -

[ListView] OwnerDraw時のCheckBox表示について

1
投稿者投稿内容
さえ
会議室デビュー日: 2008/10/24
投稿数: 10
投稿日時: 2008-10-24 23:40
■開発環境
Visual Basic 2008 Express Edition
VB.NET
Windows Application

■内容
リストビューをオーナードローONにしてDrawItem、DrawSubItemなどのイベントハンドラに処理を記述していっています。
CheckBoxesプロパティをONにしているのですが、そのチェックボックスの表示方法が分からず困っています。
DrawSubItemイベントでe.DrawText(flags)を記述すれば文言は思い通りに表示できるのですが、どのようにすればチェックボックスを表示できるでしょうか?

元々の目的はEnable=Falseにした際に背景色を変わらないようにということで、この問題自体はクリアされましたが、オーナードローにすることでどうしても上記内容が解決できませんでしたのでアドバイ

スの程、宜しくお願い致します。

※これはサブの質問ですが、オーナードローで書いたSubItemの表示の際にその部分の表示が若干ちらつくのが気になります。
 これはオーナードローで実装する上で仕方のないものなのでしょうか。それとも何か記述方法に問題があるのでしょうか。
 (参照URLのマイクロソフトの使用例をそのまま使用してもちらつきます。)
やんち
常連さん
会議室デビュー日: 2008/10/24
投稿数: 32
投稿日時: 2008-10-25 00:25
■OwnerDrawを使用する場合に、チェックボックスを表示する方法
OwnerDrawを使用する場合には、コントロールの描画処理をOSはやってくれないので、独自にチェックボックスを描画するロジックを記述する必要があります。
DrawItem、DrawSubItem、DrawColumnHeader内に自力で実装すると言う事。

■オーナードローで書いたSubItemの表示の際にその部分の表示が若干ちらつくのが気になります。
OwnerDraw使用時に、(DrawItem、DrawSubItem)を実装している様子ですが、私の予想では、(DrawItem、DrawSubItem)イベント内にて、DrawListViewColumnHeaderEventArgs#DrawBackground()を呼び出しているのではないでしょうか。(MSDNライブラリの例でも呼び出している様子ですし)
こちらのメソッド(DrawBackground())を呼び出すと背景色にて、描画領域を塗りつぶす処理が走るみたいなので、それがちらつきになっていると思います。
なので、ちらつきをなくしたいのなら、DrawBackground()を呼び出さずに、代わりとなる処理を独自に実装してあげれば良いはずです。

具体的な処理は、大変かもしれないので、がんばってください。
さえ
会議室デビュー日: 2008/10/24
投稿数: 10
投稿日時: 2008-10-25 04:50
引用:

やんちさんの書き込み (2008-10-25 00:25) より:
OwnerDrawを使用する場合には、コントロールの描画処理をOSはやってくれないので、独自にチェックボックスを描画するロジックを記述する必要があります。

こちらのメソッド(DrawBackground())を呼び出すと背景色にて、描画領域を塗りつぶす処理が走るみたいなので、それがちらつきになっていると思います。



早速のご返答有難う御座います。

チェックボックスの表示は独自に描画しないといけないんですね。。。
時間もなく面倒だったので、別の方法で逃げることにしました。
要は、画面がView Modeの際はリストビュー自体のCheckBoxesプロパティをFalseに切り替え、その代わりに別カラムにその値をアスタリスクで表示させるようにしました。
Entryモードの際はプロパティをTrueに切り替え、そのカラムは非表示にするというからくりです。

始めからこの方法を思いついていれば、Enable=Falseにすることによる背景色の懸念も払拭できていたのですが、堅い頭ではそこまで回りませんでした^^;

関係なくなってしまいまいしたが、ちらつきの原因はおそらくやんちさんの仰る通りだと思われます。
しかも、MSのサンプルはグラデーションカラーでドローしているのでそれも影響していたのではないかと予想します。

アドバイスどうも有難う御座いました。
今後ともどうぞ宜しくお願い致します。
1

スキルアップ/キャリアアップ(JOB@IT)