お世話になります。
既出でしたら申し訳ありません。
タイトルの通り、複数のチェックボックスが存在する中、チェックボックスにチェックが入っている数を数えたいです。
一つずつ判定をすればいいじゃんという話ではあるのですが、10個くらいならまだしも、50近い数の判定をif文で判定するとなると長いソースになってしまうので、もう少し短いソースで済む方法を探しています。
使用しているのはdelphiXE2です。お力添えをお願いいたします。
50近いチェックボックスを配列として参照しても、定義だけで50行必要なので別の方法として
RTTIの仕組みを使うと実現できます。
フォーム上にあるコンポーネント数は ComponentCountで取得出来ます。
1つ1つのコンポーネントは Components[i] で参照できます。
あとは 参照したクラスが TCheckboxクラスか判断するのと
Checked プロパティの値を取得すれば良いのですが
さすがにもうRTTIの参考資料とかは入手出来ませんよね・・・
※手持ちの書籍 Inside Delphi からの情報です
動作確認していませんが、以下のような感じでしょうか?
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;
take 様、igy 様
迅速なご対応をいただきありがとうございます。
igy 様の手法で対応が可能でした。ソースの提示までしていただきありがとうございました。
take 様の方法も初めて知ったので、自分の無知さに恥ずかしくなりました…。もっと勉強頑張ります。
お二方とも丁寧な対応をしていただきありがとうございました。