ComboBoxの一つ一つの行に値を持たせるには?

解決


air  2006-02-27 23:05:22  No: 20250

ComboBox1.Itemsの一つ一つの行を選択すると、
例えばプルダウンの一行目だとShowmessageが表示されて、二行目ではShowmessageでも違う文字列を表示するような感じで作っているのですが、
何故かそれに値した表示が出来ません。
TStringListを使えば出来ると聞いたのですが、その場合では上手くいきませんでした(これは私の書いたコードのミスだと思いますが)
どなたかご教授お願いします。
サンプルコード等があるサイトがあれば教えてもらえると幸いです


Basser  2006-02-28 00:09:24  No: 20251

こんな感じです。
この他にも Objects プロパティを使う方法等があります。

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ComboBox1Click(Sender: TObject);
  private
    FMsgList: TStringList;
    procedure UpdateComboList;
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  FMsgList:= TStringList.Create;
  UpdateComboList;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FMsgList.Free;
end;

procedure TForm1.UpdateComboList;
begin
  ComboBox1.Items.Clear;
  FMsgList.Clear;

  ComboBox1.Items.Add('1');
  FMsgList.Add('壱');
  ComboBox1.Items.Add('2');
  FMsgList.Add('弐');
  ComboBox1.Items.Add('3');
  FMsgList.Add('参');
end;

procedure TForm1.ComboBox1Click(Sender: TObject);
begin
  if (ComboBox1.ItemIndex >= 0) then
    ShowMessage(FMsgList[ComboBox1.ItemIndex]);
end;

end.


HOta  2006-02-28 01:31:26  No: 20252

TStringListも同じですが、Objectを使います。

type   //オリジナルのレコード型
   TMyrec=Record
      DispStr   : string;
      DialogStr : String;
   end;
   //レコード型のポインタの型を設定しておく
   PMyRec=^TMyRec;
-------------
var
   i:integer;
   myrec:PMyRec;
begin
  new(myrec);
  myrec^.DispStr:='1';
  myrec^.DialogStr = '壱';
  ComboBox1.Items.AddObject(myrec^.DispStr,Object(myrec));
  new(myrec);
  myrec^.DispStr:='2';
  myrec^.DialogStr = '弐';
  ComboBox1.Items.AddObject(myrec^.DispStr,Object(myrec));

とコンボボックスに格納します。

procedure TForm1.ComboBox1Click(Sender: TObject);
begin
  if (ComboBox1.ItemIndex >= 0) then
    ShowMessage(PMyRec(ComboBox1.Items.Objects[ComboBox1.ItemIndex])^.DialogStr );
end;
//プログラム終了時に必ず全てdisposeします。
procedure TForm1.FormDestroy(Sender: TObject);
var
   i:integer;
begin
   for i:= 0 to ComboBox1.items.count-1 do
   begin
      dispose(PMyRec(ComboBox1.items.objects[i]));
   end;
end;


air  2006-02-28 09:56:00  No: 20253

解決しました!
本当に、サンプルコードまで書いていただいて有り難うございました。
本当に感謝しています


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加