ComboBoxでのキー設定は可能?

解決


だい  2003-09-11 23:42:55  No: 4763  IP: [192.*.*.*]

お世話になっております。
Delphi6の ComboBoxを使用しようと思っています。
ドロップダウン時に
    井川
    藪
    伊良部
と表示し、"井川" を選択すると 29 という値を取得したいのです。
(値取得できるタイミングの要望はありません)

AddItemメソッドで実現できそうな印象を受けているのですが、
実際どのようにコードを記述すればよいか分かりませんでした。
どなたかご教授願えませんでしょうか。
よろしくお願いいたします。

編集    削除
Jボス  2003-09-12 00:04:51  No: 4764  IP: [192.*.*.*]

キー設定がしたいのですかね?
DBから値をとってくるだけなら方法はたくさんありますが。
その辺はどうですか?

編集    削除
だい  2003-09-12 00:59:01  No: 4765  IP: [192.*.*.*]

Jボスさん、ありがとうございます。

DBから取得したレコードのデータを
ComboBoxのItem追加時に書き込んでしまいたいと思いました。

編集    削除
だい  2003-09-12 01:15:27  No: 4766  IP: [192.*.*.*]

すみません、もうちょっと追加します。
ComboBoxには、あらかじめ
    井川   (29)
    藪     (4)
    伊良部 (41)
という項目を追加したいと思っています。
(括弧内は、DBから取得した番号データ)
ユーザが項目を選択した後、選択した項目から括弧内のデータを
取得して Labelコントロールなどに表示したいと思いました。

編集    削除
にしの  2003-09-12 01:45:06  No: 4767  IP: [192.*.*.*]

あまり見やすくないですが、
ComboBox1.Items.AddObject('井川', TObject(29));
ComboBox1.Items.AddObject('藪', TObject(4));
ComboBox1.Items.AddObject('伊良部', TObject(41));
として、ComboBox1.Items.Objectsから取り出してIntegerでキャストしてやればできますよ。

編集    削除
Jボス  2003-09-12 01:45:37  No: 4768  IP: [192.*.*.*]

とりあえずこれですが、
番号の表示はitemsの番号からtableにアクセスする方法が
使えそうなんですが・・・・。ちょっと・・
一つ質問させてください。
番号に重複はないのでしょうか?
var
     intTest: integer;
     strTest: string;  //名前
     strEdit: string;  //背番号
     strMain: string;  //名前(背番号)で表示
   begin
     Table1.open;
     with Table1 do
       begin
         for intTest := 0 to RecordCount -1 do
         begin
           strTest := FieldByname('名前').AsString;
           strEdit := fieldbyname('背番号').asstring;
           strMain := strTest+'('+strEdit+')';
           combobox1.Items.Add(strMain);
           next;
          end;
       end;
     Table1.Close;
   end;

編集    削除
だい  2003-09-12 01:59:06  No: 4769  IP: [192.*.*.*]

にしのさん、Jボスさん、ありがとうございます。

にしのさん:
これからやってみます。ありがとうございます。

Jボスさん:
番号の重複はありません。それから・・・
すみませんが、できれば番号は非表示にしたいです。
その昔、空白をいっぱい入れて右端に隠したつもりでしたが
ユーザにフォームを大きくされ、終了してしまいました。(^^;

編集    削除
だい  2003-09-12 02:24:21  No: 4770  IP: [192.*.*.*]

にしのさん、Jぼすさん、ありがとうございました。
無事、解決いたしました。

ComboBox.Items.AddObject()で実現できました。
(にしのさんから教えていただいた要領で、ComboBox.AddItem()を
 使用してもうまくいくことも確認いたしました)

Add処理部はループさせますので、決して汚くないと思います。
本当にありがとうございました。

編集    削除
KURARA  2003-09-12 02:39:59  No: 4771  IP: [192.*.*.*]

だいさんの続きですが、
真似して作ってみたのですがうまくいきません。
ComboBox1.Items.AddObject('井川', TObject(29));
ComboBox1.Items.AddObject('藪', TObject(4));
ComboBox1.Items.AddObject('伊良部', TObject(41));
コンボには井川、藪、伊良部など表示されています。
TObject(29)等の
具体的にオブジェクトの値はどのように取得したのですか。
できればコードでお願いします。

編集    削除
だい  2003-09-12 02:45:12  No: 4772  IP: [192.*.*.*]

KURARAさん、こんにちは。

with ComboBox1 do begin
  intBuffer := Integer(Items.Objects[ItemIndex]);
end;

で Integer型を取得できました。
(只今 TStringsを勉強中...)

編集    削除
KURARA  2003-09-12 02:56:24  No: 4773  IP: [192.*.*.*]

できました!!
ありがとうございました。

編集    削除