首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

动态创设实例对象[请多多指教]

2013-03-04 
动态创建实例对象[请多多指教]本帖最后由 haiou327 于 2013-02-22 21:10:39 编辑代码如下【水平有限请批评

动态创建实例对象[请多多指教]
本帖最后由 haiou327 于 2013-02-22 21:10:39 编辑 代码如下【水平有限请批评指正不胜感激】


unit DynamicCreateControlsPas;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure aBtnonClick(Sender: Tobject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }

  end;

var
  Form1: TForm1;
implementation

{$R *.dfm}

procedure Tform1.aBtnonClick(Sender: Tobject);    //事件过程定义
var
  i: integer;
begin
  for i := 1 to 5 do
  begin
    if ((Sender as TButton).Caption = 'btn' + inttostr(i)) or
      ((Sender as TButton).Caption = 'delphi' + inttostr(i))
      then
      ShowMessage((Sender as TButton).caption);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);    //创建对象实例
var
  i: Integer;
begin
  Button1.Tag := 0;
  for i := 1 to 5 do
    if not Assigned(TButton(FindComponent('btn' + inttostr(i)))) then
      with TButton.Create(self) do
      begin
        Name := 'btn' + inttostr(i);
        Button1.Tag := Button1.Tag + 80;
        top := Button1.Tag;
        left := 60;
        Width := 80;
        Height := 60;
        Parent := Self;
        onClick := aBtnonClick;
      end;
end;

procedure TForm1.Button2Click(Sender: TObject);            //实例赋值
var
  aBtn: TButton;
  i: integer;
begin
  for i := 0 to 5 do
  begin
    aBtn := TButton(FindComponent('Btn' + inttostr(i)));
    if Assigned(aBtn) then
      aBtn.Caption := 'delphi' + inttostr(i);
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);           //释放对象实例
var
  aBtn: TButton;
  i: integer;
begin
  for i := 0 to 5 do


  begin
    aBtn := TButton(FindComponent('Btn' + inttostr(i)));
    if Assigned(aBtn) then
      FreeAndNil(aBtn);
    aBtn := TButton(FindComponent('delphi' + inttostr(i)));
    if Assigned(aBtn) then
      FreeAndNil(aBtn);
  end;
end;
end.


[解决办法]
给楼主提几点改进,有点苛刻,但是好意。

创建 button 时已经把窗口作为 owner,那些 button 将随窗口自动释放,最后一节没必要。
构件位置和大小可用 BoundsRect 设置,比较简洁易读。
重复写(Sender as TButton).Caption,读起来累。
在循环中重复写 inttostr(i),应该避免。

不妨改一下,看看能精简多少代码。
[解决办法]
还有,把创建Button的代码写在一个函数中,封装性就更好了!

热点排行