動作確認
C++ Builder XE4
問題
50 x 3個のTComboBoxを持つフォームがあるとする。
そのフォームのデザインは今後変更される可能性がある場合、どのようにすれば今後作業が短時間で対応できるか。
方法
1. 変更要求が出るたびに一つずつデザインを変更する
- 欠点: デザイン変更時に毎回時間がかかる
2. テンプレートとなるコンポーネントを作って、そのコンポーネントを動的にコピーする
- テンプレート例 > 5個のTComboBox
- フォームデザイン時 : 5個のTComboBoxだけある
- 全部で50 x 3個使う、とする
- フォーム起動時に、5個を(10*3 - 1)回コピー
- コピーするためのロジックを実装しておく
- 欠点: ロジックを実装するのに時間がかかる
- 利点: 一度ロジックを実装しておけば、次回以降はテンプレートだけのデザインを変更で済み、短時間作業となる
従来は項目1で対応していたのを項目2とした。
項目2の問題は、動的コピーした場合に動的に生成されたコンポーネントの名前が自動生成され、自分が使うソフト用に名前をつけなおす処理が必要。
この点がひっかかっていた。
ふと、3つ目の方法を思いついた。
3. デザインのコピー > デザインテンプレートとなるコンポーネントを作って、そのコンポーネントのデザインだけを既存のコンポーネントへコピーする
フォームデザイン時 : 5個のデザインテンプレート用TComboBoxがあり、また145個のTComboBoxがある
-
縦一列のコンポーネント
- Leftプロパティをコピー
- Widthプロパティをコピー
-
横一列のコンポーネント
- Topプロパティをコピー
-
Heightプロパティをコピー(TComboBoxはHeight変更しても無効)
実装例
フォームデザイン画面
左上の一つがデザインテンプレートのコンポーネント。
整列後
注意点としては、フォームデザインと実行時の表示が乖離しすぎると、ソフト開発者(自分も含めて)にわかりにくいので、微調整をする程度での使い方がいいのかもしれない。
2016/02/02追記
上記の程度の変更であれば、Ctrlを押しながらコンポーネントを複数選択して、Left, widthなどをまとめて変える方が簡単な気がしてきた。