报错'cannot change visible in onshow or onhide'


问题描述:

关闭程序的时候需要修改modalresult值,

原来把加载的事件写在MailForm的onshow事件里总是报'cannot change visible in onshow or onhide';

解决方法:

不要把事件写在onshow里面,改到oncreate事件里即可:

 

关闭窗体通过修改modalresult值的方法:

procedure TFLogin.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if Self.ModalResult=mrCancel then begin if MessageDlg('确定要退出?',mtConfirmation,[mbYes,mbNo],0)=mryes then begin Self.close; Application.Terminate end else Self.ModalResult:=0; end; end;
procedure TFLogin.btn2Click(Sender: TObject); begin if MessageDlg('确定要退出?',mtConfirmation,[mbYes,mbNo],0)=mryes then begin Self.ModalResult:=mrCancel; //关闭窗体 Application.Terminate; //结束程序 end else Self.ModalResult:=0; //停留在登陆窗口 end;

 

登录窗体,登陆成功判断并修改modalresult:

procedure TFLogin.btn1Click(Sender: TObject); begin with frmDataPool.qry用户账号表 do begin Close; SQL.Text:='select * from 用户账号表 where admid = :admid '; Parameters.ParamByName('admid').Value:=edtAdmid.Text; //为admin参数赋值;  Open; end; if frmDataPool.qry用户账号表['admps']=null then //如果账号查找不到,说明账号错 begin ShowMessage('账号不存在'); Exit; end; if frmDataPool.qry用户账号表['admps'] <> edtadmps.Text then begin ShowMessage('密码错'); exit; end; Self.ModalResult:=mrOk;//对话框mrok返回 ShowMessage('登录成功!'); end;

 参考答案:http://www.rwtext.com/text.asp?id=9731

 

【编译错误解析】提示Cannot change Visible in OnShow or OnHide 的原因及解决方法

Cannot change Visible in OnShow or OnHide 的意思是:不能在 OnShow 或OnHide事件中修改显示状态

OnShow ,OnHide 本身就是指定显示与否,不可以在这样的事件中用.Visible .

就比如吧Onshow中你用Form1.Visible := False , 事让窗体在显示的时候不显示,你这不是让编译器为难么?

这就是为什么可以在OnCreate中用,不能在OnShow中用.

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM