报错'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中用.

 

转载于:https://www.cnblogs.com/ddxxxb/p/7079861.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值