zoukankan      html  css  js  c++  java
  • 实用的小对象类,提供与TStringList搭配

    不知道是Borland为了偷懒还是为了效率高,很多VCL直接使用TStringList作为成员来管理数据(如:TListBox/TStringGrid), 而不是使用专门的Item类型(如:ListView就有ListViewItem类型), 这样就使得我们想扩展的时候(比如, 在一个ListBox中显示名称,并要记录ID, 而这个ID又不能显示出来), 遇到一些麻烦.

    其实, StringList内部提供一个Objects的管理, 可以管理与string内容相关的对象. 只不过, 要求这个对象是TObject. 很多时候, 我们可能就需要另外记录一个ID或其它简单的字串, 没有必要专门做一个对象, 此时, 我们今天的主角儿就产生了:

    type
      //CopyRight(c) Hydonlee, 转载请注明出处
      TMyObject = class(TObject)
      private
        FV: Variant;
      public
        constructor Create(v: Variant);
        property Value: Variant read FV write FV;
      end;
    
    implementation
    
    constructor TMyObject.Create(v: Variant);
    begin
      self.FV := v;
    end;
    

    这个类只有一个成员: Value(Variant类型), 通过构造函数传值, 即可创建. 平时用来记录string/integer方便多了. 当然还有一个用途是很多VCL控件有TAG属性, 但这个属性只能是integer, 想要记录一个字串的时候, 就不太方便了. 那也就可以用这个小对象类来帮忙.

    下面是一个小例子, 向listbox中添加一些项目,并在单击时显示内部包含的值:

    procedure TForm1.btn1Click(Sender: TObject);
    begin
      //CopyRight(c) Hydonlee, 转载请注明出处
      lst1.Items.AddObject('I Love YOu', TMyObject.Create('1'));
      lst1.Items.AddObject('Do You Love ME', TMyObject.Create('2'));
      lst1.Items.AddObject('Sorry', TMyObject.Create('3'));
      lst1.Items.AddObject('BYE', TMyObject.Create('4'));
    end;
    
    procedure TForm1.lst1Click(Sender: TObject);
    begin
      ShowMessage(TMyObject(lst1.Items.Objects[lst1.ItemIndex]).Value);
    end;
    

    抛砖引玉,希望大家指导(发现博客园delphier不少哈...)

  • 相关阅读:
    c语言 423输出直角在右上角的等腰直角三角形
    R语言中aggregate函数进行整合数据
    c语言 425输出向下的金字塔
    C语言 423 输出直角在左上角的等腰直角三角形
    c语言 422 显示出一个横向较长的长方形
    R语言中subset函数
    R语言中for、while、if else、switch语句
    c语言 424 输出金字塔性状
    R语言中apply函数
    WinCE文件基本操作
  • 原文地址:https://www.cnblogs.com/hydonlee/p/1486331.html
Copyright © 2011-2022 走看看