掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
複数のCheckBoxの排他的選択法 (ID:28182)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
とりあえずイベントとメソッドの違いを知ることから始めるべきかな イベントは、何らかのアクションが発生した時に実行されるものである。 チェックボックスの場合、チェックボックスをクリック、または スペースキー等によりOn/OFFを切り換えた場合、OnClickイベントが発生する もちろん、コード上でCheckBox1.Checked := False のように、記述した場合 でON/OFFが変わっても、OnClickイベントが発生する。 >CheckBox1.OnClick := CheckBoxClick これは、チェックのON/OFFが切り替わったときに、CheckBoxClickを 実行するようにしましょうと、定義しているだけで、CheckBoxClickを 実行しているわけではない。 以上をふまえて (1) OK (2)違う 例で説明 (A)CheckBox1がチェック状態でCheckBox2に変更する場合 CheckBoxClickが発生する(1回目) このときCheckBoxClickの「Sender=CheckBox2」が成立する。 また、「(Sender<>CheckBox1) = True」になるので、 「CheckBox1.Checked:=False;」が処理される このとき、OnClick = nil としておかないと、CheckBox1のOn/Offが 切り替わるため、Sender=CheckBox1としてCheckBoxClickが実行される。(2回目) 2回目のCheckBoxClickでは、(Sender<>CheckBox2)のため 「CheckBox2.Checked:=False;」が実行され、せっかくのチェックが はずれてしまう。 ここで、CheckBox2がONからOFFに変わったため、再度「Sender=CheckBox2」 としてCheckBoxClickが実行される。(3回目) 3回目は、1回目同様「(Sender<>CheckBox1) = True」のため 「CheckBox1.Checked:=False;」が実行されるが、もともと 「CheckBox1.Checked = False」の状態なので、Sender=CheckBox1としての CheckBoxClickは発生せず。 以降は、ON/OFFの変更が発生しないため、再度のCheckBoxClickが発生せず すべてチェックがはずれた状態になる。 (B)次に、CheckBox1にチェックありCheckBox1をクリックした場合 Sender=CheckBox1として、CheckBoxClickが実行されるが、すべてチェックが はずれた状態のため、一回限りのCheckBoxClickとなる。 (C)最後、すべてチェックなしでCheckBox1をクリックした場合 Sender=CheckBox1として、CheckBoxClickが実行されるが、 Sender<>CheckBox1 の場合に限り CheckBox1.Checked:=False; を実行するため CheckBox1がONからOFFになることはない。またCheckBox2,CheckBox3は、OFFの 状態なので、CheckBox2.Checked:=False;, CheckBox3.Checked:=False; による ON/OFF変化なく、CheckBoxClickが発生しないので、CheckBox1のみ チェックされる。 > #ただ,CheckBoxを2回クリックしないといけない. 上記(A)と(C)が発生しているだけ。 CheckBoxClick で、ブレークポイントつけて、何回発生するか確認してみなさい。 (3)前述の通り
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.