|
データを選択するのに便利なコントロールで、よく見かけるものです。
右のようなやつです。
プログラム中では、
ComboBox.List(ComboBox.ListIndex)
で、現在選択/表示されている文字列を取得する事が出来ます。
"ComboBox.List()"は選択文字のリスト(一覧)を表し、
"ComboBox.ListIndex"は現在選択されている場所(-1の時は未選択,0〜の値)を意味しています。
ほとんどの場合は、上記のようにして選択された情報(主に"ComboBox.ListIndex"の値)を使用することになるのでしょうが、"ComboBox"には文字リストに対応する数値データ用のリストとして、"ComboBox.ItemData()"が用意されています。
同様に、
ComboBox.ItemData(ComboBox.ListIndex)
とする事で、現在選択/表示されている情報に対応する"ItemData()"の値を取得する事が出来ます。
これは、下記のような場合に大変便利となります。
表1)のように、"ComboBox"に値を割り付けていたとします(ItemDataの値は初期値=0です)。この時、プログラム中では"
"ComboBox.ListIndex"の値によって処理を行う必要があります。
例えば、選択肢5を選んでいる時には、4(="ComboBox.ListIndex"の値)を使う事になります。
ところが、"選択肢4"が不要になったとする(表2)と、同じ選択肢5を選んだにも関わらず、プログラム中では3の値を使う必要があり、プログラムの変更が必要となるでしょう(変更量は内容によっても変わりますが...)。
| ListIndexを使う場合) |
表1)
| ListIndex |
List |
ItemData |
| 0 |
選択肢1 |
0 |
| 1 |
選択肢2 |
0 |
| 2 |
選択肢3 |
0 |
| 3 |
選択肢4 |
0 |
| 4 |
選択肢5 |
0 |
| 5 |
選択肢6 |
0 |
|
表2)
| ListIndex |
List |
ItemData |
| 0 |
選択肢1 |
0 |
| 1 |
選択肢2 |
0 |
| 2 |
選択肢3 |
0 |
| 3 |
選択肢5 |
0 |
| 4 |
選択肢6 |
0 |
| 5 |
選択肢7 |
0 |
|
他方、ItemDataを使うと各選択肢にそれぞれItemDataの値を割り付けます。
こうすることで、選択肢とは関係なく一意に選択された情報とItemDataの値を関連付けられることになりますので、先のように"選択肢4"が削除された場合でもプログラム中で使用する値、105(="ComboBox.ItemData(ComboBox.ListIndex)"の値)は変わりませんので、プログラムの変更は不要となります。
| ItemDataを使う場合) |
表3)
| ListIndex |
List |
ItemData |
| 0 |
選択肢1 |
101 |
| 1 |
選択肢2 |
102 |
| 2 |
選択肢3 |
103 |
| 3 |
選択肢4 |
104 |
| 4 |
選択肢5 |
105 |
| 5 |
選択肢6 |
106 |
|
表4)
| ListIndex |
List |
ItemData |
| 0 |
選択肢1 |
101 |
| 1 |
選択肢2 |
102 |
| 2 |
選択肢3 |
103 |
| 3 |
選択肢5 |
105 |
| 4 |
選択肢6 |
106 |
| 5 |
選択肢7 |
107 |
|
"ItemData()"プロパティは使い方によっては大変便利ですし、プログラムのメンテナンス性も向上させます。
#「C++Builder/Delphi」の"ComboBoxコントロール"には"ItemData()"はありません。いつもこれだけは欲しいと思ってしまいます(^^;
|