delphi ComboBox AddObject 正确使用方法

it2026-05-08  5

最近写了一个类来实现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值时 乱码或内存异常  所以自己写了一个类 采用字符串数组来赋值

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 public13 14 procedure Additem(ADOQuery1: TADOQuery;Asql:string; ccb: TComboBox;var ss:Tarr ); //ss必须是传地址参数15 16 end;17 18 implementation19 20 { TMycbb }21 22 procedure TMycbb.Additem(ADOQuery1: TADOQuery;Asql:string; ccb: TComboBox;var ss:Tarr);23 var24 i: Integer;25 s: string;26 begin27 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 do36 begin37 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.

测试主窗体赋值操作

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)