チェックボックスでテキストボックス等の使用可・不可を制御させる

f:id:accs2014:20180610023116p:plain:right:w500

 Tipsといいますか、ちょっとした応用です。
 フォーム上で重要な値を誤って変更してしまわないようにコントロールを使用不可とするものの、ユーザーがチェックボックスを操作することにより使用可とすることができる、という仕組みです。
 例としてこのような単票フォームを用いて、「価格」の使用可・不可を操作させるものとします。


f:id:accs2014:20180610023112p:plain:right:w600

 まずは非連結のチェックボックスを設置し、名前を「変更不可チェック」とします。非連結のチェックボックスですのでコントロールソースは空欄となります。


f:id:accs2014:20180610023109p:plain:right:w600

 このチェックボックスの既定値をTrueとします。


f:id:accs2014:20180610023105p:plain:right:w500

 次にテキストボックス(価格)の設定です。
 条件付き書式を開きます。設定については簡単に言って「式」、「[変更不可チェック]=True」とし、「有効化」のボタンをクリック(実際には使用不可となる設定)します。
 設定はこれで終了です。


f:id:accs2014:20180610023102p:plain:right:w500

 フォームビューで見てみますと、チェックボックスは既定値によりTrueとなっており、価格はグレーアウトしていて使用することができません。


f:id:accs2014:20180610023230p:plain:right:w500

 チェックボックスをクリックしてFalseにすると使用可となり、値を変更することができます。


f:id:accs2014:20180610023227p:plain:right:w500

 このチェックボックスとテキストボックスの状態(使用可・不可)は、他のレコードに移っても変わりません。
 また、フォームを閉じてから開きなおしたときは再度True(使用不可)となります。

 割と簡単でしたが基本的には以上です。


f:id:accs2014:20180610023224p:plain:right:w500

 さて、上記の例ではチェックボックスを詳細セクション内に置きましたので、フォームを帳票フォームに変更した場合にはすべてのレコードにチェックボックスが表示されます。どのチェックボックスも同じ値(True,False)を示し、どれかをクリックすると一斉に変更されます。テキストボックスの状態(使用可・不可)も同様です。


f:id:accs2014:20180610023221p:plain:right:w500

 そこでチェックボックスをフォームヘッダーに移した例です。
 チェックボックスをクリックするとすべてのレコードのテキストボックスの状態が一斉に変更されます。こちらの方がちょっとスマートかと思います。


f:id:accs2014:20180610023218p:plain:right:w500

 最後にですが、レコードごとに可・不可を制御させたいということがあるかもしれません(この例ではさほど必要性を感じませんが)。
 その場合は、テーブルにチェックボックスの値を記録するための列を持たせます。ここでは「変更不可フラグ」とし、Yes/No型とします。


f:id:accs2014:20180610023304p:plain:right:w600

 これをコントロールとしてフォーム(帳票フォームとしています)の詳細セクションに置きます。これまでの例と違って連結コントロールですので、コントロールソースに値が表示されます。
 あとは条件付き書式の設定を上記と同様にすればOKです。


f:id:accs2014:20180610023301p:plain:right:w500

 レコードごとにテキストボックスの変更可・不可を制御することができます。
 レコードごとの状態はテーブルに記録されていますので、フォームを閉じてから開きなおしても、以前の状態が維持されています。