问个combobox.item的问题。 ( 积分: 10 )

  • 主题发起人 主题发起人 mill666
  • 开始时间 开始时间
M

mill666

Unregistered / Unconfirmed
GUEST, unregistred user!
想让 combobox的item的显示的值跟返回的值不同,意思就是:item里面显示的是:
中国
美国
德国

中国对应的值是03,美国对应的值是06,德国对应的是05,这样我选择“美国:的法,其实我得到的值应当是"06"。
看了delphi7自带的帮助,里面有一个例子,使用的是item.addobject方法,可以达到这个功能:
procedure TForm1.Button1Click(Sender: TObject);
var s : string;
i:integer;
begin
combobox1.Clear;
i:=0;
s := '03';
combobox1.Items.AddObject('中国',TObject(s));
s := '06';

combobox1.Items.AddObject('美国',TObject(s));
s := '05';
combobox1.Items.AddObject('德国',TObject(s));
end;


procedure TForm1.ComboBox1Change(Sender: TObject);
begin
begin
edit1.Text :=
string(combobox1.Items.Objects[combobox1.ItemIndex]);

end;

end;
这样,在选择combobox的值的时候,edit1.text就返回了正确的对应的值。

可是:
大家看到了那个 s 变量了,如果不是直接给s变量付值,二是通过另外一个变量付值,比如上面的程序写成:
procedure TForm1.Button14Click(Sender: TObject);
var s : string;
i:integer;
begin
combobox1.Clear;
i:=0;

s:=inttostr(i+3);
combobox1.Items.AddObject('中国',TObject(s));

s:=inttostr(i+6);
combobox1.Items.AddObject('美国',TObject(s));

s:=inttostr(i+5);
combobox1.Items.AddObject('德国',TObject(s));
end;


procedure TForm1.ComboBox1Change(Sender: TObject);
begin
begin
edit1.Text :=
string(combobox1.Items.Objects[combobox1.ItemIndex]);
end;
end;
这个时候edit1.text就得不到值了,showmessage(edit1.text)得到的是一个乱码。

请问这是为什么??或者大家有没有其他的办法实现同样的功能?item里面的项是变动的,程序不能写死的。
 
想让 combobox的item的显示的值跟返回的值不同,意思就是:item里面显示的是:
中国
美国
德国

中国对应的值是03,美国对应的值是06,德国对应的是05,这样我选择“美国:的法,其实我得到的值应当是"06"。
看了delphi7自带的帮助,里面有一个例子,使用的是item.addobject方法,可以达到这个功能:
procedure TForm1.Button1Click(Sender: TObject);
var s : string;
i:integer;
begin
combobox1.Clear;
i:=0;
s := '03';
combobox1.Items.AddObject('中国',TObject(s));
s := '06';

combobox1.Items.AddObject('美国',TObject(s));
s := '05';
combobox1.Items.AddObject('德国',TObject(s));
end;


procedure TForm1.ComboBox1Change(Sender: TObject);
begin
begin
edit1.Text :=
string(combobox1.Items.Objects[combobox1.ItemIndex]);

end;

end;
这样,在选择combobox的值的时候,edit1.text就返回了正确的对应的值。

可是:
大家看到了那个 s 变量了,如果不是直接给s变量付值,二是通过另外一个变量付值,比如上面的程序写成:
procedure TForm1.Button14Click(Sender: TObject);
var s : string;
i:integer;
begin
combobox1.Clear;
i:=0;

s:=inttostr(i+3);
combobox1.Items.AddObject('中国',TObject(s));

s:=inttostr(i+6);
combobox1.Items.AddObject('美国',TObject(s));

s:=inttostr(i+5);
combobox1.Items.AddObject('德国',TObject(s));
end;


procedure TForm1.ComboBox1Change(Sender: TObject);
begin
begin
edit1.Text :=
string(combobox1.Items.Objects[combobox1.ItemIndex]);
end;
end;
这个时候edit1.text就得不到值了,showmessage(edit1.text)得到的是一个乱码。

请问这是为什么??或者大家有没有其他的办法实现同样的功能?item里面的项是变动的,程序不能写死的。
 
我这里不一定是乱码,是不是与存储方式不同,要不就是BUG
 
把Text :=string(combobox1.Items.Objects[combobox1.ItemIndex]);改成:
Edit1.Text := String(ComboBox1.Items.Objects[1]);就可以了,每次选中后的项就是Objects[1];
 
刚没看清楚你的意图,可以这么解决:
 SL:= TStringList.Create;
SL.Add(inttostr(i+3));
 combobox1.Items.AddObject('中国',TObject(SL[0]));
 SL.Add(inttostr(i+6));
combobox1.Items.AddObject('美国',TObject(SL[1]));
 SL.Add(inttostr(i+6))
combobox1.Items.AddObject('德国',TObject(SL[2])); 
之所以出现你说的那种情况,可能是因为在TObject( 某对象)时,该对象要是实体,不能是地址指针或虚对象。 
 
有个叫“条目数据”的Long,可以存储
 
干脆用两个combobox1
combobox1 add 中国',美国'....
combobox2 add 03,06......
combobox1 change 时
写combobox2.itemindex:=combobox1.itemindex
s:=combobox2.text;
 
请问“金卡绣球jk8.com”,什么是“条目数据”?什么属性?什么控件??怎么使用??
 
后退
顶部