我在FORM上放上一个PAGECONTROL在上面新建两个PAGE
又在每个PAGE上放如一个LISTVIEW
有如下代码 不知道错误所在请指出unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    ListView1: TListView;
    ListView2: TListView;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;type
 a=class(tthread)
private
 procedure execute;override;
end;type
 b=class(tthread)
private
 procedure execute;override;
end;var
  Form1: TForm1;implementation{$R *.dfm}
procedure a.execute;
var
 I:integer;
 a:tlistitem;
begin
  for i:=1 to 10 do
  begin
   a:=form1.ListView1.Items.Add;
   a.Caption:=inttostr(i);
  end;
end;procedure b.execute;
var
 I:integer;
 a:tlistitem;
begin
  for i:=1 to 10  do
  begin
   a:=form1.ListView2.Items.Add;
   a.Caption:=inttostr(i);
  end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
 a.Create(false);
 b.Create(false);
end;end.

解决方案 »

  1.   

    想访问VCL主线程里的对象(form1.ListView2)一定要在
    Synchronize方法里调用,这是多线程最基本的概念。
    多学学多线程基础东西吧。procedure a.Proc1;
    begin
    var
     I:integer;
     a:tlistitem;
    begin
      for i:=1 to 10  do
      begin
       a:=form1.ListView2.Items.Add;
       a.Caption:=inttostr(i);
      end;
    end;procedure b.Proc1;
    var
     I:integer;
     a:tlistitem;
    begin
      for i:=1 to 10  do
      begin
       a:=form1.ListView2.Items.Add;
       a.Caption:=inttostr(i);
      end;
    end;procedure a.Execute;
    beign
      while not Terminated do
        Synchronize(a.Proc1);  //这样调用
    end;
    我爱Delphi!
      

  2.   

    没用呀 还是只有在tabsheet1上面的Listview内有数字 TABSHEET2上面的LISTVIEW内还是一无所货 只不过这次不出错误了 进步不小呀
    我想要的是两个LISTVIEW内同时都有1..10