當我的專案嘗試使用該.Show命令打開單獨的表單時,我遇到了訪問沖突。
該代碼應該打開login表單。但只是輸出訪問沖突錯誤。
這是來自主表單的代碼,并在其激活時運行:
procedure TForm4.FormActivate(Sender: TObject);
begin
label1.BringToFront;
DBMatch.Enabled := false;
DBContestants.Enabled := false;
btncreate.Enabled := false;
DbNav.Enabled := false;
login.Show;
end;
以下代碼是login表單的開頭:
unit login_form;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs ,StdCtrls, ExtCtrls, unit4,pngimage;
type
Tlogin = class(TForm)
edit_username: TEdit;
edit_password: TEdit;
btnlogin: TButton;
btnForgotten: TButton;
lUsername: TLabel;
LPassword: TLabel;
Imageside: TImage;
procedure btnloginClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
end;
var
login: Tlogin;
password,result:string;
implementation
{$R *.dfm}
uses dmChess_u;
這是主表單上的錯誤之一

uj5u.com熱心網友回復:
您的Form4(MainForm) 物件是在創建物件之前login創建的。很有可能,該事件也會在物件創建TForm.OnActivate之前被觸發。login因此,當您嘗試呼叫它時,login指標仍然存在。您可以使用除錯器輕松驗證這一點。nilShow
表單的OnActivate事件不是顯示登錄表單的好地方。每當表單獲得輸入焦點時就會觸發該事件,這可能在表單的生命周期內發生多次。
此外,通常最好不要在程式啟動時自動創建 Form 物件,MainForm 除外。僅在實際需要時通過Create建構式動態創建 Form 物件,并在不再需要時釋放它們,例如:
login := Tlogin.Create(nil);
try
login.ShowModal;
finally
login.Free;
end;
或者:
login := Tlogin.Create(Self);
login.Show;
...
// OnClose event handler
procedure TloginClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
但是,在這種特殊情況下,如果您希望用戶在與 MainForm 互動之前登錄,我建議在 MainForm 創建之前顯示登錄表單,例如:
Application.Initialize;
login := Tlogin.Create(nil);
try
if login.ShowModal <> mrOk then
Exit;
finally
login.Free;
end;
Application.CreateForm(TForm4, Form4);
Application.Run;
uj5u.com熱心網友回復:
另一個答案真的很好。我只是補充一點。不要手動創建表單。只需在專案中創建它,然后在需要時呼叫它。在專案中創建表單后,您可以在表單界面上做任何您想做的事情并撰寫您需要的代碼。然后當你需要表單時,你可以在主表單上有一個按鈕。單擊按鈕時,使其顯示表單。
frmLogin.ShowModal;
使該按鈕不可見。在創建代碼塊時將此代碼添加到您的 mainForm 中,或者通過取消選中可見屬性在按鈕屬性上手動執行此操作。
btnLogin.Visible := false;
然后轉到您的主表單事件并轉到 On Show。雙擊并在出現的代碼塊中只寫
btnLogin.Click;
這意味著在表單顯示之前它將單??擊現有按鈕。由于 show 事件是在 create 事件之后執行的,并且您已經在專案中創建了兩個表單,因此您不會遇到這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/519522.html
標籤:德尔福德尔福-2010
