TCheckBoxの問題点。
ActionプロパティにTActionをセットするとCheckedの値がTActionの値に基づかない場合があります。
症状:
という場合で
とすると、生成されたForm2のCheckBox1.CheckedはTrueではなくFalseになってしまいます。
またForm1のAction1.Checkedの値もFalseになってしまいます。
本来ならForm2の生成時に現在のForm1のAction1の値を基にForm2のCheckBox1の値を変えなければならないものを(RadioButtonやToolButtonなどではそうなります)Form2のCheckBox1の値を基にForm1のAction1の値を変えてしまっています。
対策:
その1.
Form1のAction1の値のセットを行う前、例えばForm1のOnCreateでForm2をCreateしてしまいます。
事前にCreateしてあればこの問題は起きません。
この例ではAction1.Checkedの値をセットするときにはForm2のCheckBox1は既に生成されているのでAction1の値が適用されるので問題はおきません。
その2.
CheckBox1のActionプロパティは設計時にはセットせず、Form2のOnCreateでセットします。
そのときにはCheckBox1のActionプロパティにForm1.Action1をセットする前にAction1の値をCheckBox1にセットしないといけません。
CheckBox1のActionプロパティにAction1をセットする前にCheckedの値をセットすることが肝です。
これをしないと設計時のCheckBoxのCheckedの値のままになります。
CheckBox1のActionプロパティにAction1をセットする前にCheckedの値をセットしなかった場合の例。
このコードの結果は、
設計時のCheckBox1のCheckedの値がFalseならば、lb_BeforはTrueになりますがlb_AfterはFalseになります。
設計時のCheckBox1のCheckedの値がTrueならば、lb_Beforもlb_AfterもTrueになります.。
ただしその場合Form1.Action1.Checked := False;とした場合、lb_BeforはFalseになりますがlb_AfterはTrueになります。
どうやらTCheckBoxの場合はActionプロパティをセットするとき、Checkedの値はTActionの値ではなくTCheckBoxのCheckedの値を基にしてしまうようです。
2010-02-08: