1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

c++ builder XE4, 10.2 Tokyo > debug / testing > OnKeyPressイベントをセットし忘れたコンポーネントを明示する

Last updated at Posted at 2016-02-01
動作確認
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;
		}
	}
}

結果

qiita.png

実装理由

コードの失敗はソースコードを読めばわかる。また、見つけやすい。

フォームデザインの失敗は一見ではわからない。OnKeyPressを設定していないコンポーネントを探すには以下のいずれかをしないといけない。

  1. 一つ一つのTComboBoxのプロパティを順番に確認する
  • 時間がかかる
  1. .dfmファイルを確認する
  • .dfmファイルは1つのコンポーネントに対して複数行でのプロパティ表示なので、検索しずらい

どちらも時間がかかり、今後の開発でこういうことを繰り返したくはない。

こういう理由から上記のような仕組みを考えた。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?