delphi ComboBox AddObject 正确使用方法

最近写了一个类来实现ComboBox下拉取值已减少数据库访问次数

大家都知道AddObject可以这样填充值

var s,s1,s2: string;
begin
s :
= 'you ';
Combobox1.items.AddObject(
'', Tobject(s));
s1 :
= 'me ';
Combobox1.items.AddObject(
'', Tobject(s));
s2 :
= 'he ';
Combobox1.items.AddObject(
'', Tobject(s));

但当 值从数据库读取或变量组合赋值 就会造成 读取Combobox1值时 乱码或内存异常  所以自己写了一个类 采用字符串数组来赋值

ContractedBlock.gif ExpandedBlockStart.gif View Code
 1 unit Mccb;
2
3 interface
4
5 uses adodb, StdCtrls;
6 type
7 Tarr = array of string; //自定义类型 用于赋值
8 type
9
10 TMycbb = class(Tobject)
11
12 public
13
14 procedure Additem(ADOQuery1: TADOQuery;Asql:string; ccb: TComboBox;var ss:Tarr ); //ss必须是传地址参数
15
16 end;
17
18 implementation
19
20 { TMycbb }
21
22 procedure TMycbb.Additem(ADOQuery1: TADOQuery;Asql:string; ccb: TComboBox;var ss:Tarr);
23 var
24 i: Integer;
25 s: string;
26 begin
27 ccb.items.clear();
28 s := 'bd';
29 ccb.items.addobject('不定', Tobject(s));
30 ADOQuery1.close();
31 ADOQuery1.SQL.Text :=Asql;
32 ADOQuery1.open();
33
34 SetLength(ss, ADOQuery1.RecordCount);
35 for i := 0 to ADOQuery1.RecordCount - 1 do
36 begin
37
38
39 ss[i] := ADOQuery1.Fields[0].AsString;
40 ccb.Items.AddObject(ADOQuery1.Fields[1].AsString, TObject(ss[i]));
41 ADOQuery1.Next();
42 end;
43 ADOQuery1.close();
44 end;
45
46 end.

测试主窗体赋值操作

ContractedBlock.gif ExpandedBlockStart.gif View Code
var ss: Tarr;  //必须是全局变量  需引用uses MyCcb

..........
procedure TForm1.Button9Click(Sender: TObject);
var dd: TMycbb;
sqls:
string;
begin
sqls :
= 'select lang_code,lang_name from language_code';
dd :
= TMycbb.Create;

try
dd.Additem(ADOQuery1, sqls, ComboBox1, ss);

finally
dd.Free;
ComboBox1.ItemIndex :
=0;
end;
end;

读取操作

procedure TForm1.Button7Click(Sender: TObject);
var A_Value: string;
begin
A_Value :
= string(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);

ShowMessage(A_Value);
end;

这样实现了从数据库读取字典表 添加commobox了 经测试 无内存泄露

转载于:https://www.cnblogs.com/chinawcs/archive/2011/07/16/AddObject.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值