複数のチェックボックスのチェック数を数える

解決


ユイ  2020-01-22 15:10:25  No: 148462

お世話になります。
既出でしたら申し訳ありません。
タイトルの通り、複数のチェックボックスが存在する中、チェックボックスにチェックが入っている数を数えたいです。
一つずつ判定をすればいいじゃんという話ではあるのですが、10個くらいならまだしも、50近い数の判定をif文で判定するとなると長いソースになってしまうので、もう少し短いソースで済む方法を探しています。
使用しているのはdelphiXE2です。お力添えをお願いいたします。


take  2020-01-22 16:08:46  No: 148463

50近いチェックボックスを配列として参照しても、定義だけで50行必要なので別の方法として
RTTIの仕組みを使うと実現できます。

フォーム上にあるコンポーネント数は ComponentCountで取得出来ます。
1つ1つのコンポーネントは Components[i] で参照できます。

あとは 参照したクラスが TCheckboxクラスか判断するのと
Checked プロパティの値を取得すれば良いのですが

さすがにもうRTTIの参考資料とかは入手出来ませんよね・・・
※手持ちの書籍 Inside Delphi からの情報です


igy  2020-01-22 16:10:01  No: 148464

動作確認していませんが、以下のような感じでしょうか?

var
  cp: TComponent;
  i, chk_cnt: Integer;

chk_cnt := 0;
for i := 0 to ComponentCount - 1 do
begin
    cp := Components[i];
    if cp is TCheckBox then
       if TCheckBox(cp).Checked then
          inc(chk_cnt);
end;


ユイ  2020-01-22 16:34:08  No: 148466

take 様、igy 様
迅速なご対応をいただきありがとうございます。

igy 様の手法で対応が可能でした。ソースの提示までしていただきありがとうございました。
take 様の方法も初めて知ったので、自分の無知さに恥ずかしくなりました…。もっと勉強頑張ります。

お二方とも丁寧な対応をしていただきありがとうございました。


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








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