我在子窗体中运行线程时遇到问题。
主窗体
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Unit2;
procedure TForm1.Button1Click(Sender: TObject);
begin
TForm2.create(form1).ShowModal;
end;
SUBform
type
TMthread=class(Tthread)
protected
procedure execute; override;
end;
type
TForm2 = class(TForm)
Label1: TLabel;
procedure FormShow(Sender: TObject);
private
public
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
uses Unit1;
procedure TMthread.Execute;
begin
synchronize( procedure
begin
sleep(200);
freeonterminate:=true;
sleep(200);
form2.label1.Caption:='beep';
form1.button1.Caption:='beep';
end);
end;
procedure TForm2.FormShow(Sender: TObject);
var Loadcombo2: TMthread;
begin
Loadcombo2:=TMthread.Create(False);
end;
程序
program Project1;
uses
Vcl.Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
我在尝试访问 Form2.Label1.caption 时在执行过程中出错。
我的测试:
当我在初始化部分(最后一个代码(中添加子窗体(Form2(时,应用程序运行没有错误,但不会更改Form2上的Label1.caption。(主窗体上的按钮 1.标题已更改(
当我将完全相同的线程放在主窗体中时,它可以正常工作。
变量
Form2
永远不会被分配。因为它是一个全局变量,所以它的值是 nil
。因此,当您尝试引用 Form2
的成员时会遇到错误。
您可以创建如下所示的Form2
实例:
TForm2.Create(Form1).ShowModal;
我怀疑你的意思是写这样的东西:
Form2 := TForm2.Create(Form1);
Try
Form2.ShowModal;
Finally
Form2.Free;
End;