Delphi的大BUG!ESC关闭模态窗口(通过Button.Cancel=True实现)居然使RadioButton出错了! (30分)

  • 主题发起人 主题发起人 coolqiang
  • 开始时间 开始时间
C

coolqiang

Unregistered / Unconfirmed
GUEST, unregistred user!
form1 Button1
form2 RadioButton1,RadioButton2,RadioButton3
BitBtn1 Kind = bkOK
BitBtn2 Kind = bkCancel

var
Form1: TForm1;
No:integer;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
case No of //No在Form1中
0: form2.radiobutton1.Checked := True;
1: form2.radiobutton2.Checked := True;
2: form2.radiobutton3.Checked := True;
end;

if form2.showmodal=mrok then
begin
if form2.radiobutton1.Checked then
No := 0
else if form2.radiobutton2.Checked then
No := 1
else
No := 2;
end;
end;

运行后测试,点击form1.Button1,form2中radiobutton1是选中的,改为选中radiobutton2
,[red]按BitBtn2[/red]返回后,再次点击form1.button1进入,是radiobutton1选中,是
正确的。如果同样的步骤,但用按下ESC(因为BitBtn2的Cancel是True,这样应该是同按下
BitBtn同一效果)来取代按BitBtn2,再次按form1.button1进入,发现确是radiobutton2选
中,结果错误!
这是怎么一回事?照理它们的效果应该完全一样啊!
 
你把你的顺序颠倒过来,先用键盘事件.再用鼠标事件;如果这次出错的是鼠标事件
那么,就是你的form2,没刷新.或者参数没刷新.
肯定不是bug.
 
你是一下我的代码.在delphi5中调试通过;
procedure TForm1.Button1Click(Sender: TObject);
var
Form2: TForm2;
begin
Form2:= TForm2.create(application);
form2.RadioGroup1.ItemIndex :=No;
if form2.showmodal=mrok then
begin
if form2.RadioGroup1.ItemIndex =0 then
No := 0
else if form2.RadioGroup1.ItemIndex =1 then
No := 1
else
No := 2;
end;

end;
 
eric.youbin:不关先后的问题,我试过好多遍。只试键盘操作也照样出问题!
你的代码我没试,应该没问题。但我不是没法实现这样的功能,只是想针对这个问题来研
究到底是不是BUG!
 
eric.youbin:你的那段代码不行啊!跟我的效果一样!
 
如果是我的代码也有问题的话,那就是你的版本真的有bug,我这边调试过的.
 
是吗?不太可能吧!
能不能把你调试好的EXE文件发给我,我试试看!
mailto:coolqiang@163.net
 
我在Delphi 5下试了,也是有问题,例如点击form2的X关闭,也是不对
我跟踪了一下,发现就是show的时候,发送了一个什么消息,radiobutton的checked状态就不对了
但是消息太多了,很难分析,我认为确实是bug
 
Brave说得没错,我不用Cancel属性,直接用OnkeyDown事件捕获ESC键,然后Close窗体,发
现也是错误的!
 
多人接受答案了。
 
后退
顶部