DataGridViewのチェックボックスを押下不可にするには?

解決


なまぐり  2007-04-26 21:00:10  No: 136250

DataGridViewのチェックボックスについてご存知でしたら教えてください。

DataGridViewは列の編集で[ThreeState=True]とすると、ON/OFFの他に
曖昧な状態を保持できるようですが、「曖昧」ではなく押下不可の状態を
作ることは可能でしょうか?

いろいろ探ってはいたのですが、それらしいサイトは見つけられず、
ならばチェックボックスの色を変えてプログラム上で制御しようとも
考えたのですが、BackColorは変更可でもチェックボックス自体は色を
変えることが出来ませんでした。
画面上で「チェックボックス押下不可」の状態をどうにか作りたいの
ですが。。。


魔界の仮面弁士  2007-04-26 21:55:40  No: 136251

ReadOnly プロパティで良いのでは?
DataGridView / DataGridViewRow / DataGridViewColumn / DataGridViewCell の。


なまぐり  2007-04-26 23:14:03  No: 136252

魔界の仮面弁士さん、回答ありがとうございます。

DataGridViewのReadOnlyプロパティでは、押下してみなければ
可/不可が判断できないのです。
画面を見た際に、対象のチェックボックスは押下できないと
いう意味づけを持ちたいのですが。。。

チェックボックスを拡張できないか現在検討中ですが、
なかなかうまくいかずにいます。
Enabledを持たせられたらいいのですが。。。やり方を知って
いらしたら教えてください。


魔界の仮面弁士  2007-04-27 00:28:32  No: 136253

> 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 かと。


なまぐり  2007-04-27 01:33:57  No: 136254

魔界の仮面弁士さん、ありがとうございます。

私の頭では全部を理解するのはまだまだ難しいのですが、
(オーバーライドの辺りはまだ勉強不足なので。。。)
「継承しない場合」の記述を参考させていただいたところ、
イメージに近い形で表示されるのが確認できました。

これを元に自分なりに拡張していきたいと思います。
今回はこれで[解決]させていただきます。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加