動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
問題
複数のTComboBoxのイベント OnKeyPressに共通の処理を設定するとする。
フォームデザイン画面において、すべてのTComboBoxイベントにOnKeyPressを設定したと思ったら、実はいくつか抜けていた場合、それをどう見つけるのか?
.dfmをいじる、というのはしないという前提
対策
OnFormShowで以下のコードを実行する
Unit1.cpp
void __fastcall TForm1::debug_showKeyPressNotSetTCombobox()
{
TComponent *ptarget;
for(int idx = 0; idx < ComponentCount; idx++) {
ptarget = this->Components[idx];
if (dynamic_cast<TComboBox *>(ptarget) == NULL) {
continue;
}
TComboBox *cbPtr = (TComboBox *)ptarget;
if (cbPtr->OnKeyPress == NULL) {
cbPtr->Items->CommaText = "KeyPress_not_set";
cbPtr->ItemIndex = 0;
}
}
}
結果
実装理由
コードの失敗はソースコードを読めばわかる。また、見つけやすい。
フォームデザインの失敗は一見ではわからない。OnKeyPressを設定していないコンポーネントを探すには以下のいずれかをしないといけない。
- 一つ一つのTComboBoxのプロパティを順番に確認する
- 時間がかかる
- .dfmファイルを確認する
- .dfmファイルは1つのコンポーネントに対して複数行でのプロパティ表示なので、検索しずらい
どちらも時間がかかり、今後の開発でこういうことを繰り返したくはない。
こういう理由から上記のような仕組みを考えた。