報錯'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