delphi 子窗体中的线程错误
delphi thread error in subform
我在 运行 子表单中的线程时遇到问题。
主窗体
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;
子表单
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。([=主窗体上的 32=] 已更改)
当我在主窗体中放置完全相同的线程时,它可以正常工作。
变量Form2
从未被赋值。因为是全局变量,所以它的值为nil
。因此,当您尝试引用 Form2
.
的成员时会遇到错误
您创建了一个 Form2
的实例,如下所示:
TForm2.Create(Form1).ShowModal;
我怀疑你是想写这样的东西:
Form2 := TForm2.Create(Form1);
Try
Form2.ShowModal;
Finally
Form2.Free;
End;
我在 运行 子表单中的线程时遇到问题。
主窗体
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;
子表单
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。([=主窗体上的 32=] 已更改)
当我在主窗体中放置完全相同的线程时,它可以正常工作。
变量Form2
从未被赋值。因为是全局变量,所以它的值为nil
。因此,当您尝试引用 Form2
.
您创建了一个 Form2
的实例,如下所示:
TForm2.Create(Form1).ShowModal;
我怀疑你是想写这样的东西:
Form2 := TForm2.Create(Form1);
Try
Form2.ShowModal;
Finally
Form2.Free;
End;