delphi 中一个奇怪的现象

ghhlovehyf 2011-05-12 03:35:15
两个form ,form1 调用 form2 代码

var
lform : TForm2;
begin
lform := TForm2.create(nil);(Application);
lform.show(showmodal);

end;

在form2的onshow事件里写
procedure Tform2.onshow()
begin
self.close; //这句不起作用
end;

form2 会报错 cannot change visible in onshow or onhide

并用 form2会依然显示,不会消失

不管你在canclose 或 closequery 中去设置
action 和 canclose 都不行

实际上是要完成一个功能就是,显示完了,立即自动关掉
...全文
113 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Frank.WU 2011-05-13
  • 打赏
  • 举报
回复
代码正确,逻辑错误。。。没什吗好奇怪的
newfang 2011-05-12
  • 打赏
  • 举报
回复
在create事件代码最后写:
PostMessage(Handle,WM_CLOSE,0,0);
mingle lu 2011-05-12
  • 打赏
  • 举报
回复
在oncreate和onshow里都是不能colse的,具体原因我也没深入研究。不过一般在onshow或者oncreate里需要colse都是有条件不满足的情况下才会这么做,所以可以把条件判断放到对象创建或显示之前。不然的话只能像楼上说的在timer里close,但是这样做不好,自己用无所谓,如果客户用就会提意见了。
jayqiang 2011-05-12
  • 打赏
  • 举报
回复
var
lform : TForm2;
begin
lform := TForm2.create(nil);(Application);
lform.show(showmodal);
//show之后可以使用Sleep睡一下!后再关闭
//或者在TForm2中加入Timer。时间到在关闭!
sleep(2000);
lform.close;

end;
浩南_哥 2011-05-12
  • 打赏
  • 举报
回复

var
Form2: TForm2;
implementation

{$R *.dfm}

procedure TForm2.Timer1Timer(Sender: TObject);
begin
Self.Close;
end;

添加个Timer,时间设置短一点
kaikai_kk 2011-05-12
  • 打赏
  • 举报
回复
显示完了就关闭,那还显示它干什么?
浩南_哥 2011-05-12
  • 打赏
  • 举报
回复
。。。。。。。你直接在form2显示时延迟几秒中,然后在self.close就行了。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧