zoukankan      html  css  js  c++  java
  • Delphi 2009 泛型容器单元(Generics.Collections)[5]: TObject...<T> 系列

    已经有了: TList<T>、TQueue<T>、TStack<T>、TDictionary<TKey,TValue>
    为什么还有: TObjectList<T>、TObjectQueue<T>、TObjectStack<T>、TObjectDictionary<TKey,TValue> ?

    还记得 Classes.TList 和 Contnrs.TObjectList 的主要区别吗?
    如果元素是对象, Contnrs.TObjectList 在删除元素时会同时释放对象, 而 Classes.TList 不会.

    同样在这里, Generics.Collections.TObjectList<T> 会同时释放对象, 而 Generics.Collections.TList<T> 不会.
    其他也是一样.

    还是要做个例子测试一下:
    本例效果图:



    代码文件:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
    
    type
      TForm1 = class(TForm)
        Panel1: TPanel;
        Panel2: TPanel;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    uses Generics.Collections;
    
    var
      List    : TList<TButton>;       {譬如要管理 TButton 对象}
      ObjList : TObjectList<TButton>;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      List := TList<TButton>.Create;
      ObjList := TObjectList<TButton>.Create;
    
      Button1.Caption := '创建 Button 并添加到 TList';
      Button2.Caption := '删除 TList 中的 Button';
      Button3.Caption := '创建 Button 并添加到 TObjectList';
      Button4.Caption := '删除 TObjectList 中的 Button';
    
      Button2.Enabled := False;
      Button4.Enabled := False;
    end;
    
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      List.Free;
      ObjList.Free;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      btn: TButton;
    begin
      btn := TButton.Create(Self);
      btn.Caption := 'TList 中的 Button';
      btn.Parent := Panel1;
      btn.Width := 132;
      List.Add(btn);
    
      Button1.Enabled := False;
      Button2.Enabled := True;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      List.RemoveAt(0);
    
      Button1.Enabled := True;
      Button2.Enabled := False;
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    var
      btn: TButton;
    begin
      btn := TButton.Create(Self);
      btn.Caption := 'TObjectList 中的 Button';
      btn.Parent := Panel2;
      btn.Width := 132;
      ObjList.Add(btn);
    
      Button3.Enabled := False;
      Button4.Enabled := True;
    end;
    
    procedure TForm1.Button4Click(Sender: TObject);
    begin
      ObjList.RemoveAt(0);
    
      Button3.Enabled := True;
      Button4.Enabled := False;
    end;
    
    end.
    
    窗体文件:
    object Form1: TForm1
      Left = 0
      Top = 0
      Caption = 'Form1'
      ClientHeight = 153
      ClientWidth = 408
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      OnCreate = FormCreate
      OnDestroy = FormDestroy
      PixelsPerInch = 96
      TextHeight = 13
      object Panel1: TPanel
        Left = 8
        Top = 8
        Width = 193
        Height = 137
        Caption = 'Panel1'
        TabOrder = 0
        object Button1: TButton
          Left = 8
          Top = 76
          Width = 177
          Height = 25
          Caption = 'Button1'
          TabOrder = 0
          OnClick = Button1Click
        end
        object Button2: TButton
          Left = 8
          Top = 107
          Width = 177
          Height = 25
          Caption = 'Button2'
          TabOrder = 1
          OnClick = Button2Click
        end
      end
      object Panel2: TPanel
        Left = 207
        Top = 8
        Width = 194
        Height = 137
        Caption = 'Panel2'
        TabOrder = 1
        object Button3: TButton
          Left = 8
          Top = 76
          Width = 177
          Height = 25
          Caption = 'Button3'
          TabOrder = 0
          OnClick = Button3Click
        end
        object Button4: TButton
          Left = 8
          Top = 107
          Width = 177
          Height = 25
          Caption = 'Button4'
          TabOrder = 1
          OnClick = Button4Click
        end
      end
    end
    
  • 相关阅读:
    多任务GUI窗口系统(类window,有源码,支持汉字显示、顶层、非矩形和透明窗口)gicell源码
    怎样判断treeview当前节点为treeview显示出来的第一个节点和最后一个节点?
    用 dbgrid 或 dbgrideh 如何让所显示数据自动滚动
    vue路由懒加载及组件懒加载
    vue 中使用rem布局
    纯css实现移动端横向滑动列表&&overflow:atuo;隐藏滚动条
    分布式一致性算法Raft
    HDU_1753 大明A+B
    POJ——3630 Phone List
    HDU_2647 Reward (拓扑排序)
  • 原文地址:https://www.cnblogs.com/del/p/1269262.html
Copyright © 2011-2022 走看看