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

ListView OwneDraw時のCheckBox表示。

環境/言語:[XP/VB.NET]
分類:[.NET]

質問させてください。

タイトル通りです。
OwnerDrawをTrueにすると
CheckBoxをTrueにしても表示されません。
調べてみましたが仕様のようでした。

何とかCheckBoxを表示させる方法は無いでしょうか?
よろしくお願いします。
自分で描画する必要があります。
VisualStyle が無効の場合は ControlPaint.DrawCheckBox メソッドで、そうでない場合は System.Windows.Forms.VisualStyles 名前空間のクラス、VisualStyleRenderer および VisualStyleElement.Button.CheckBox などが使用できるでしょう。
Hongliangさん、ありがとうございます。

VisualStyleRendererの方向で
もう少し詳しく
解説をお願いできませんでしょうか?
よろしくお願いします。
と言われても何を解説すればいいのかさっぱり分かりません。
取り敢えず、MSDN やヘルプで VisualStyleRenderer クラスの解説にあるサンプルコードを検証されてはいかがでしょう。
\Hongliangさん、ありがとうございます。

VisualStyleRenderer クラスの解説にあるサンプルコードを検証し、
チェックボックスを描画することができました。

次に、オンとオフの切り替えを考えているのですが、
その行のチェックボックスのオブジェクトそのもの、
チェックボックスの状態(オンなのかオフなのか)を取得できないのです。

また、オンで表示させてオフに設定したあと
別の動作で再描画されると
オンに戻ってしまいます。
これを回避する方法がわかりません。

説明下手ですが
引き続きよろしくお願いします。
> その行のチェックボックスのオブジェクトそのもの、
> チェックボックスの状態(オンなのかオフなのか)を取得できないのです。
ListViewItem の Checked プロパティを見ればいいでしょう。

> また、オンで表示させてオフに設定したあと別の動作で再描画されるとオンに戻ってしまいます。
DrawItem/DrawSubItem イベント以外で、CreateGraphics したりして描画させていますか?
ListViewItem.Checked を変更してやれば、ListView は自動的に DrawItem/DrawSubItem イベントを発生させます。そのイベントの中で(ListViewItem.Checked を参照して)描画して下さい。
Hongliangさん、ありがとうございます。

> ListViewItem の Checked プロパティを見ればいいでしょう。
MouseDoubleClickイベントで
Dim s As ListViewItem = Me.GetItemAt(e.X, e.Y)
にて対象の行を取得し、
s.Checked
でTrueかFalseを取得し分岐しようと考えたのですが
チェックがされていてもFalseを取得してしまいます。

引き続きよろしくお願いします。
項目をダブルクリック時にチェックボックスのオンオフが切り替わるのは、ListView の基本的な仕様としてシステムがデフォルトで実装済みのはずですから、単に切り替わった後のチェック状態を取得してるだけじゃないですか?
Hongliangさん、ありがとうございます。
確認が遅くなりました、申し訳ありません。

やっと理解できました。
お付き合いいただき、
Hongliangさんには感謝いたします。
また次も懲りずに
よろしくお願いします。

閉じます。
解決済み!

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