帮忙看看这段代码,为什么出错?(listbox的addobject)(100分)

  • 主题发起人 主题发起人 jbas
  • 开始时间 开始时间
J

jbas

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在listbox中添加两个数据进一个item,但不能有相同的data(addobject中的object),这
段代码有什没错误呢?谢谢!
procedure TFrmDphb.Button4Click(Sender: TObject);
var
I:integer;
TempBl:boolean;
TempStr:string;
TempPstr:string;
begin
TempBl:=true;
TempPstr:=FramDpInfo1.EdtDpbh.Text;
TempStr:=FramDpInfo1.EdtDpName.Text;
for I:=0 to hbDpList.Items.Count-1 do
begin
if string(hbDpList.Items.Objects)=TempPstr then
// if hbDpList.Items=TempStr then
TempBl:=false;
end;
if TempBl=true then
hbDpList.Items.AddObject(TempStr,tobject(TempPstr));
// hbDpList.Items.Add(FramDpInfo1.EdtDpName.Text);
end;
 
多点几次总是出现,某地址出错。是不是addobject还要new,还要dispose???
 
能否把控件说清楚
 
FramDpInfo1:Frame控件。
Edt..*:Tedit;
hbDpList:Tlistbox;
 
各位帮帮忙呀!
 
用hbDpList.Items.AddObject(TempStr,tobject(TempPstr))添加,必须显式的释放。
 
那上面这段代码为什么不行呢?
不是释放的缘故吧?
 
用ListBox1.AddItem()试试
 
为什么这样也错?????????
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
s,x:string;
u:boolean;
begin
u:=false;
s:=edit1.Text;
x:=edit2.Text;
listbox1.Items.AddObject(s,tobject(x));
end;

procedure TForm1.FormClose(Sender: TObject
var Action: TCloseAction);
var
i:integer;
begin
for i:=0 to listbox1.Items.Count-1 do
listbox1.Items.Objects.Free;
end;
 
现在要下了,请大侠们帮忙!
 
procedure TForm1.BitBtn4Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to listbox1.Items.Count-1 do
listbox1.Items.Delete(i)
end;
 
上面的代码都是有错的
不知你的目的是什么?
 
试试,没发现错误!
procedure TForm1.Button1Click(Sender: TObject);
var
I:integer;
TempBl:boolean;
TempStr:string;
TempPstr:string;
begin
TempBl:=true;
TempPstr:=Edit1.Text;
TempStr:=Edit2.Text;
for I:=0 to ListBox1.Items.Count-1 do
begin
if string(ListBox1.Items.Objects)=TempPstr then
// if ListBox1.Items=TempStr then
TempBl:=false;
end;
if TempBl=true then
ListBox1.Items.AddObject(TempStr,tobject(TempPStr));
// ListBox1.Items.Add(TempStr);
ListBox1.ItemIndex := 0;
end;
 
是不是类型强型转换的问题呢?

你试试声明一个类来保存数据,或是用TStrings来保存你的数据,不要用string.
 
我跟踪调试,发现是在下列这句出错的:
TempPstr:=edit1.Text;
我查看了edit1.text的数据类型,是WideString;
所以我对变量定义和程序做了以下修改:
var
...
TempStr:WideString;
TempPstr:WideString;
...
if widestring(hbDpList.Items.Objects)=(TempPstr) then
...
问题解决了,你试下吧........
 
to linsb,truecat
不行,当添加几个数据后,出现cpu那个调试窗口,或者还可以添加相同的数据。
to weekboy,
这个是释放addobject后的数据代码吗?删除listbox的item,就一同释放了申请的内存吗?
to BeginDelphi,
用tstrings来保存数据,我这样对吗?但还是总有问题!
procedure TFrmDphb.Button4Click(Sender: TObject);
var
I:integer;
TempBl:boolean;
TempStr:tstrings;
TempPstr:tstrings;
begin
TempBl:=true;
TempPstr:=Tstrings(FramDpInfo1.EdtDpbh.Text);
TempStr:=Tstrings(FramDpInfo1.EdtDpName.Text);
for I:=0 to hbDpList.Items.Count-1 do
begin
if Tstrings(hbDpList.Items.Objects)=TempPstr then
TempBl:=false;
end;
if TempBl=true then
hbDpList.Items.AddObject(FramDpInfo1.EdtDpName.Text,TempPstr);
hbDpList.ItemIndex:=0;
end;

to xianjun:
我想在listbox中添加两个数据进一个item,但不能有相同的data(addobject中的object).
即一个item中保存两个数据。象html中的下拉框中的:
<option value="bbbb">aaaa</option>显示aaaa,实际值为bbbb.
但我要的是每个option中不能有相同的bbbb.即item中的addobject不能有相同的Tobject.
谢谢各位!
 
to jbas
为什么到你那儿不行?
留下email我发给你,试试。
 
jbas@163.com
谢谢了!
 
后退
顶部