我想做一个这样的控件,
在TComboBox上加一个 ItemValues: TStrings属性,
想将一些信息保存在这里面,请问这个控件怎么做?
最好给我完整的且没有错误的代码,我写了一个,但有错误

解决方案 »

  1.   

    不要用Tstrings.用tstringList.
    1、定义一个属性:
    property ItemValues : TstringList read FItemValues write SetItemValues;
    2、在构造函数里加
    FItemValues := TStringList.Create;
    3、在析构函数里加
    FItemValues.Free;
      

  2.   

    可以定义一个记录类型,分name,value等属性,每次增加Item时,增加一个记录指针,访问value属性时访问该记录指针即可
      

  3.   

    我编的调用这两个按钮后,就报错
    下面有控件代码
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      zcComboBox1.ItemValues.Add('a');
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      i: integer;
      s: string;
    begin
      if zcComboBox1.ItemValues.Count > 0 then
      begin
        s := zcComboBox1.ItemValues.Strings[0];
        for i:=1 to zcComboBox1.ItemValues.Count - 1 do
          s := zcComboBox1.ItemValues.Strings[i];
        ShowMessage(s);
      end;
    end;
    我编写的控件代码是这样的:unit zcComBox;interfaceuses Windows, Messages, SysUtils, Classes, Controls, StdCtrls;type
      TzcComboBox = class(TComboBox)
      private
        { Private declarations }
        FItemValues: TStringList;
      protected
        { Protected declarations }
        procedure SetItemValues(const Value: TStringList); virtual;
      public
        { Public declarations }
        constructor Create(AOwner: TComponent); Override;
        destructor Destroy; override;
      published
        { Published declarations }
        property ItemValues: TStringList read FItemValues write SetItemValues;
      end;
      procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Stanard', [TzcComboBox]);
    end;constructor TzcComboBox.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      ItemValues := TStringList.Create;
      FItemValues := TStringList.Create;
    end;procedure TzcComboBox.SetItemValues(const Value: TStringList);
    begin
      if Assigned(FItemValues) then
        FItemValues.Assign(Value)
      else
        FItemValues := Value;
    end;destructor TzcComboBox.Destroy;
    begin
      ItemValues.Free;
      FItemValues.Free;
      inherited Destroy;
    end;end.
      

  4.   

    将构造函数和析构函数改写即可  ItemValues := TStringList.Create;//这句是错的
    constructor TzcComboBox.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      FItemValues := TStringList.Create;
    end;destructor TzcComboBox.Destroy;
    begin
      FItemValues.Free;
      inherited Destroy;
    end;