最近写了一个类来实现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
