我用for循环创建线程,在两个文本框中显示不同字符串,但是只有最后一个文本框有内容unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation
uses
  unit2;
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin
  for i := 0 to 1 do
  begin
    Test.create(false,i);
  end;
end;end.unit Unit2;interfaceuses
  Classes;type
  Test = class(TThread)
  private
    procedure test;
    { Private declarations }
  protected
    procedure Execute; override;
  public
    constructor create(suspended:boolean;i:integer);
  end;var
  id:integer;implementation
uses
  unit1;constructor Test.create(suspended: Boolean; i: Integer);
begin
  inherited create(suspended);
  id:=i;
end;procedure Test.Execute;
begin
  { Place thread code here }
  Synchronize(test);
end;procedure Test.test;
begin
  if id=0 then
    form1.Edit1.Text := 'hello'
  else if id=1 then
    form1.Edit2.Text := 'test';
    
end;end.

解决方案 »

  1.   

    你的命名都不规范我帮你整理一下, 你copy我的代码type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
    uses
      unit2;
    {$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      i:integer;
    begin
      for i := 0 to 1 do
      begin
        with TTestThread.create(false,i) do;
      end;
    end;end.unit Unit2;interfaceuses
      Classes;type
      TTestThread = class(TThread)
      private
        procedure test;
        { Private declarations }
      protected
        procedure Execute; override;
      public
        constructor create(suspended:boolean;i:integer);
      end;var
      id:integer;implementation
    uses
      unit1;constructor TTestThread.create(suspended: Boolean; i: Integer);
    begin
      inherited create(suspended);
      id:=i;
    end;procedure TTestThread.Execute;
    begin
      { Place thread code here }
      Synchronize(test);
    end;procedure TTestThread.test;
    begin
      if id=0 then
        form1.Edit1.Text := 'hello'
      else if id=1 then
        form1.Edit2.Text := 'test';
        
    end;end.
      

  2.   

    procedure TTestThread.Execute;
    begin
      { Place thread code here }
      inherited; //加上这个试试
      Synchronize(test);
    end;
      

  3.   

    constructor Test.create(suspended: Boolean; i: Integer);
    begin
    id:=i;
    inherited create(suspended);
    end;
    //先赋值再继承执行
    ==========================================
    procedure TTestThread.Execute;
    begin
    { Place thread code here }
    Synchronize(test);
    Sleep(0);
    end;
      

  4.   

    type
    Test = class(TThread)
    private
    id:integer;  //id声明在这里看看
    procedure test;
    { Private declarations }
    protected
    procedure Execute; override;
    public
    constructor create(suspended:boolean;i:integer);
    end;