DataGridViewのチェックボックスについてご存知でしたら教えてください。
DataGridViewは列の編集で[ThreeState=True]とすると、ON/OFFの他に
曖昧な状態を保持できるようですが、「曖昧」ではなく押下不可の状態を
作ることは可能でしょうか?
いろいろ探ってはいたのですが、それらしいサイトは見つけられず、
ならばチェックボックスの色を変えてプログラム上で制御しようとも
考えたのですが、BackColorは変更可でもチェックボックス自体は色を
変えることが出来ませんでした。
画面上で「チェックボックス押下不可」の状態をどうにか作りたいの
ですが。。。
ReadOnly プロパティで良いのでは?
DataGridView / DataGridViewRow / DataGridViewColumn / DataGridViewCell の。
魔界の仮面弁士さん、回答ありがとうございます。
DataGridViewのReadOnlyプロパティでは、押下してみなければ
可/不可が判断できないのです。
画面を見た際に、対象のチェックボックスは押下できないと
いう意味づけを持ちたいのですが。。。
チェックボックスを拡張できないか現在検討中ですが、
なかなかうまくいかずにいます。
Enabledを持たせられたらいいのですが。。。やり方を知って
いらしたら教えてください。
> Enabledを持たせられたらいいのですが。。。
クラスを継承すれば、プロパティは自由に追加できますよね。
http://msdn2.microsoft.com/ja-jp/library/ms171619%28VS.80%29.aspx
動作自体は ReadOnly だけで十分なはずなので、あとは見た目ということで、
DataGridViewCheckBoxCell.Paint メソッドをオーバーライドして、
DrawCheckBox メソッドを足してやれば良いかと。
継承しない場合は、CellPainting イベントで処理。
If 該当セル Then
Dim selected As Boolean = CBool(e.State And DataGridViewElementStates.Selected)
e.PaintBackground(e.CellBounds, selected)
Dim rect As Rectangle = e.CellBounds
rect.Offset(0, rect.Height \ 2 - 8)
rect.Height = 16
ControlPaint.DrawCheckBox(e.Graphics, rect, ButtonState.Inactive)
e.Handled = True
End If
XP の VisualStyle を有効にしたいなら、ControlPaint.DrawCheckBox を
CheckBoxRenderer.DrawCheckBox に変更すれば OK かと。
魔界の仮面弁士さん、ありがとうございます。
私の頭では全部を理解するのはまだまだ難しいのですが、
(オーバーライドの辺りはまだ勉強不足なので。。。)
「継承しない場合」の記述を参考させていただいたところ、
イメージに近い形で表示されるのが確認できました。
これを元に自分なりに拡張していきたいと思います。
今回はこれで[解決]させていただきます。
ありがとうございました。
ツイート | ![]() |