DELPHI死循环,求救!
首先申明,在DELPHI方面我才开始学,现在遇到一个重大问题:我用下面的一个checkbox来实现勾选效果,但是在运行过程中进入死循环,死循环几秒后出现什么“EStack...
首先申明,在DELPHI方面我才开始学,现在遇到一个重大问题:我用下面的一个checkbox来实现勾选效果,但是在运行过程中进入死循环,死循环几秒后出现什么“EStackOverflow”,郁闷死了,看起来代码并没有错,为什么会出现死循环呢?请高手指教!我以前学过VFP的,这样的代码绝对不会有死循环的。
这是全部代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
xz1: TCheckBox;
Button1: TButton;
procedure xz1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.xz1Click(Sender: TObject);
begin
if xz1.checked=false then //xz1是一个checkbox
begin
xz1.caption:='111111';
xz1.checked:=true;
end
else if xz1.checked=true then
begin
xz1.caption:='222222';
xz1.checked:=false;
end;
end;
procedure TForm1.Button1Click(Sender: TObject); //button1是一个关闭按扭
begin
close;
end;
end.
请高手说明原因啊,不胜感激! 展开
这是全部代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
xz1: TCheckBox;
Button1: TButton;
procedure xz1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.xz1Click(Sender: TObject);
begin
if xz1.checked=false then //xz1是一个checkbox
begin
xz1.caption:='111111';
xz1.checked:=true;
end
else if xz1.checked=true then
begin
xz1.caption:='222222';
xz1.checked:=false;
end;
end;
procedure TForm1.Button1Click(Sender: TObject); //button1是一个关闭按扭
begin
close;
end;
end.
请高手说明原因啊,不胜感激! 展开
2个回答
展开全部
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if checkbox1.Checked = false then
checkbox1.Caption:='aa';
else
checkbox1.Caption:='bb';
end;
原因:checkbox1.checked:=true;本身就是向checkbox1发送一个onclick消息,当你在if xz1.checked=false then部分有这一部分代码,编辑器还没有执行完else部分的代码,就又接到一个checkbox1click事件;而第二次接到的消息是执行else部分的代码,又出现一个checkbox1.checked:=false;又一个onclick件,如此循环而已。
当编辑器对你这个可怕的代码感到厌烦时,“EStackOverflow”,罢工!
EStackOverflow意思是栈溢出。
begin
if checkbox1.Checked = false then
checkbox1.Caption:='aa';
else
checkbox1.Caption:='bb';
end;
原因:checkbox1.checked:=true;本身就是向checkbox1发送一个onclick消息,当你在if xz1.checked=false then部分有这一部分代码,编辑器还没有执行完else部分的代码,就又接到一个checkbox1click事件;而第二次接到的消息是执行else部分的代码,又出现一个checkbox1.checked:=false;又一个onclick件,如此循环而已。
当编辑器对你这个可怕的代码感到厌烦时,“EStackOverflow”,罢工!
EStackOverflow意思是栈溢出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询