一个极为“简单”但小弟我无法解释也无法解决的有关问题——
一个极为“简单”但我无法解释也无法解决的问题求助——紧急求助
定义一个极为简单的测试类,类里面有个定时器,周期执行。
但是当创建这个类的第二个实例后,前一个实例就没执行了。
测试类代码如下:
unit UnitTestClass;
interface
uses
Windows,SysUtils,Forms,ExtCtrls;
type
TTestClass = class(TObject)
private
procedure Timer1Timer(Sender: TObject);
public
ID:string;//传入的参数,为了输出到界面观察
function Start():Boolean;
end;
implementation
uses Unit2; //界面,方便输出到界面观察
var Timer1:TTimer;
procedure TTestClass.Timer1Timer(Sender: TObject);
begin
Form2.Memo1.Lines.Add(ID);//仅仅是为了观察执行了没
end;
function TTestClass.Start():Boolean;
begin
if Timer1 =nil then
begin
Timer1:=TTimer.Create(Application);
end;
Timer1.Interval:=1000;
Timer1.OnTimer:=Timer1Timer;
Timer1.Enabled:=True;
end;
end.
现在回到窗体创建类的实例:
procedure TForm2.Button14Click(Sender: TObject);
var TestClass:TTestClass;
begin
TestClass:=TTestClass.Create;
TestClass.ID:='我是ID1';
TestClass.Start;
end;
观察,正常,界面输出:我是ID1
现在创建第二个实例:
procedure TForm2.Button15Click(Sender: TObject);
var TestClass:TTestClass;
begin
TestClass:=TTestClass.Create;
TestClass.ID:='我是ID2';
TestClass.Start;
end;
观察,窗体上出现了:我是ID2,再也不会出现ID1了。
请教这是为什么?如何解决。
------解决思路----------------------
问题在于
var Timer1:TTimer;
变量,这里定义为单元局部变量,第一个实例和第二个实例共用Timer1,当第二个实例创建并start时,Timer1的ontime事件已经指向第二个实例的Timer1Timer(Sender: TObject);触发的当然是第二个实例的事件,第一个实例被屏蔽掉。
要解决的问题的话要将Timer1定时器定义类的私有变量。创建类时创建就可以了。
------解决思路----------------------
问题解决就好了,接分了。
------解决思路----------------------
解决就是硬道理,接分了。
定义一个极为简单的测试类,类里面有个定时器,周期执行。
但是当创建这个类的第二个实例后,前一个实例就没执行了。
测试类代码如下:
unit UnitTestClass;
interface
uses
Windows,SysUtils,Forms,ExtCtrls;
type
TTestClass = class(TObject)
private
procedure Timer1Timer(Sender: TObject);
public
ID:string;//传入的参数,为了输出到界面观察
function Start():Boolean;
end;
implementation
uses Unit2; //界面,方便输出到界面观察
var Timer1:TTimer;
procedure TTestClass.Timer1Timer(Sender: TObject);
begin
Form2.Memo1.Lines.Add(ID);//仅仅是为了观察执行了没
end;
function TTestClass.Start():Boolean;
begin
if Timer1 =nil then
begin
Timer1:=TTimer.Create(Application);
end;
Timer1.Interval:=1000;
Timer1.OnTimer:=Timer1Timer;
Timer1.Enabled:=True;
end;
end.
现在回到窗体创建类的实例:
procedure TForm2.Button14Click(Sender: TObject);
var TestClass:TTestClass;
begin
TestClass:=TTestClass.Create;
TestClass.ID:='我是ID1';
TestClass.Start;
end;
观察,正常,界面输出:我是ID1
现在创建第二个实例:
procedure TForm2.Button15Click(Sender: TObject);
var TestClass:TTestClass;
begin
TestClass:=TTestClass.Create;
TestClass.ID:='我是ID2';
TestClass.Start;
end;
观察,窗体上出现了:我是ID2,再也不会出现ID1了。
请教这是为什么?如何解决。
------解决思路----------------------
问题在于
var Timer1:TTimer;
变量,这里定义为单元局部变量,第一个实例和第二个实例共用Timer1,当第二个实例创建并start时,Timer1的ontime事件已经指向第二个实例的Timer1Timer(Sender: TObject);触发的当然是第二个实例的事件,第一个实例被屏蔽掉。
要解决的问题的话要将Timer1定时器定义类的私有变量。创建类时创建就可以了。
------解决思路----------------------
问题解决就好了,接分了。
------解决思路----------------------
解决就是硬道理,接分了。