是这样的,我的窗体上有一个scrollbox,一个button,另外有一个文本,我想点击窗体上的button,从文本里调动字符动态生成N个按钮,点击生成后的每个按钮时也可以执行从文本里调用的不用的事件,可以总是有问题,文本来代码如下:
文本:1#01#张小强#19780512#
1#01#王小鸡#18452514#
1#01#王达华#19874512#
..................
1#01#小春妹#19821547#
1#01#刘小丫#19811212#-----------以下是xxmmmx(踢踏)兄给的,但是情况比较复杂:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure myClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    sl,ss: TStringList;
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormActivate(Sender: TObject);
begin
  sl:= TStringList.Create;
  ss:= TStringList.Create;
  ss.Delimiter:= '#';
  sl.LoadFromFile('c:\a.txt');
end;procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
  t, l : integer;
  temp:TButton;
begin
  t:=20;
  l:=30;
  for i := 0 to sl.Count-1 do
  begin
    ss.DelimitedText:= sl[i];
    temp:=TButton.Create(Self);
    temp.Caption := ss[2];
    temp.Parent := Self;
    temp.Top := t+40*i;
    temp.Left := l;
    temp.tag := i;
    temp.onclick := myclick;
  end;
end;procedure TForm1.myClick(Sender: TObject);
var
  i: Integer;
begin
  i:=(Sender as TButton).Tag;
  ss.DelimitedText:= sl[i];
  ss.Delimiter:= '#';
  ShowMessage(ss[3]);
end;end.问题是每次点击button1的时候都会又生成一组按钮,我想应该可以做到在点击的时候判断后释放,因为我的窗体很复杂,点击button2时也会在上面生成一组按钮,还有button3,button4,用那种判断时,不起作用,一样的生成,不知道怎么回事

解决方案 »

  1.   

    也就是说,我这一组按钮是点击button1动态生成在scrollbox1里面的,同样窗体上还有别的按钮,如button2,button3,点击他们时,也要在scrollbox1里面按同样的方法生成一组按钮并清除以前的,如果我点击button1生成了一组,再点button2的时候呢?清除不了button1生成的这一组啊,我查了查有的用
      for i := 0 to Scrollbox1.ControlCount - 1 do
      begin
        Scrollbox1.Controls[i].Destroy;
      end;
    但试了下程序出现错误,不明白
      

  2.   

    temp.Parent := Self;
    ??
      

  3.   

    上面是踏兄用的一个例子,用的self,没用scrollbox,我是想button1,button2,button3...都使用相似的代码,点击后首先清楚scrollbox1,然后再生成相应的一组按钮
      

  4.   

    既然控件不归scrollbox1所有,那么下面的代码肯定不能清除了
    for i := 0 to Scrollbox1.ControlCount - 1 do
      begin
        Scrollbox1.Controls[i].Destroy;
      end;
      

  5.   

    var
      nx:integer;
      temp:TButton;begin
      nx:=10;
      for nx := Scrollbox1.ControlCount-1 downto 0 do
      begin
        Scrollbox1.Controls[nx].Free;
      end;
      for nx:=0 to 9 do begin
      temp:=tbutton.Create(self);
      temp.Parent:=self;
      temp.Top:=nx*10;
      temp.Left:=0;
      temp.Height:=10;
      end;
    end;
      

  6.   

    temp.Parent:=self;
    ==>
    temp.parent:=scrollbox1;