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

    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.

    测试主窗体赋值操作

    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了 经测试 无内存泄露

  • 相关阅读:
    算法总结7—多维缩放
    算法总结3—神经网络
    算法总结9—优化
    算法总结8—非负矩阵因式分解
    R语言系列—区间估计
    算法总结2—决策树分类器
    算法总结5&6k最近邻与聚类
    统计,逻辑与智能
    算法总结4—支持向量机
    R语言系列—回归分析
  • 原文地址:https://www.cnblogs.com/chinawcs/p/AddObject.html
Copyright © 2020-2023  润新知