delphi listbox的问题 急
选取listbox1的项,同时在另一边对应显示这一项的其他信息。高手看看,我到底错哪了?谢谢,我就1个财富值了,实在对不起!procedureTForm1.FormCre...
选取listbox1的项,同时在另一边对应显示这一项的其他信息。高手看看,我到底错哪了?谢谢,我就1个财富值了,实在对不起!
procedure TForm1.FormCreate(Sender: TObject);
begin
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select*from CustomerGrade');
open;
while not Eof do
begin
listbox1.Items.Add(FieldByName('GAN').AsString);
next;
end;
Free;
end;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
edit2.Text:=listbox1.Items.Strings[listbox1.itemindex];
with adotable1 do
begin
close;
filter:=' GAN ='+''''+trim(listbox1.Items.Strings[listbox1.itemindex])+'''';
filtered:=true;
open;
edit1.Text:=fieldbyname('GAD').AsString;
edit3.Text:=fieldbyname('GAS').AsString;
MEMO1.Text:=FIELDBYNAME('GAW').AsString;
free;
end;
主要是下面一段 我运行时第一次点击listbox里的内容时,有效,但第二次点击就出现错误 展开
procedure TForm1.FormCreate(Sender: TObject);
begin
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select*from CustomerGrade');
open;
while not Eof do
begin
listbox1.Items.Add(FieldByName('GAN').AsString);
next;
end;
Free;
end;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
edit2.Text:=listbox1.Items.Strings[listbox1.itemindex];
with adotable1 do
begin
close;
filter:=' GAN ='+''''+trim(listbox1.Items.Strings[listbox1.itemindex])+'''';
filtered:=true;
open;
edit1.Text:=fieldbyname('GAD').AsString;
edit3.Text:=fieldbyname('GAS').AsString;
MEMO1.Text:=FIELDBYNAME('GAW').AsString;
free;
end;
主要是下面一段 我运行时第一次点击listbox里的内容时,有效,但第二次点击就出现错误 展开
4个回答
展开全部
我建议这样操作
TMyObj=class
GAN,
Gao,
GAS,
GAW: String;
end;
--加载List列表
while not adotable1.EOF do
begin
--将数据转换到对象
obj:=TMyObj.Create;
obj.GAN:=adotable1.FieldByName('Gan').AsString
obj.Gao:=.......................Gao...........
obj.GAS:=.......................GAS...........
--将对象增加到list
listbox1.Items.AddObject(obj.Gan, obj);
adotable1.Next;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var
obj: TMyObj;
begin
obj := listbox1.Items.Objects[Listbox1.Itemindex] as TMyObj;
edit1.Text := obj.GAN;
edit2.Tetx := obj.GAO;
.....
edit2.Text:=listbox1.Items.Strings[listbox1.itemindex];
obj:=nil;
end;
我这样处理效率很高的,当然,如果你的列表数据过大效率就不怎么样
TMyObj=class
GAN,
Gao,
GAS,
GAW: String;
end;
--加载List列表
while not adotable1.EOF do
begin
--将数据转换到对象
obj:=TMyObj.Create;
obj.GAN:=adotable1.FieldByName('Gan').AsString
obj.Gao:=.......................Gao...........
obj.GAS:=.......................GAS...........
--将对象增加到list
listbox1.Items.AddObject(obj.Gan, obj);
adotable1.Next;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var
obj: TMyObj;
begin
obj := listbox1.Items.Objects[Listbox1.Itemindex] as TMyObj;
edit1.Text := obj.GAN;
edit2.Tetx := obj.GAO;
.....
edit2.Text:=listbox1.Items.Strings[listbox1.itemindex];
obj:=nil;
end;
我这样处理效率很高的,当然,如果你的列表数据过大效率就不怎么样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
很多解决办法。
用一个最最聪明的办法,不用listbox用一个datagrid代替,只显示一列,然后公用一个数据源就可以了。
你的代码可以这样修改
filter:=' GAN ='+QuotedStr(listbox1.Items.Strings[listbox1.itemindex]);
用一个最最聪明的办法,不用listbox用一个datagrid代替,只显示一列,然后公用一个数据源就可以了。
你的代码可以这样修改
filter:=' GAN ='+QuotedStr(listbox1.Items.Strings[listbox1.itemindex]);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就是最后free的问题.
第一次调用.成功.但最后一步释放掉了
第二次调用的时候,前面都通过FREE释放掉了你再调用.不错才怪了.
第一次调用.成功.但最后一步释放掉了
第二次调用的时候,前面都通过FREE释放掉了你再调用.不错才怪了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询