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