2012-01-09 122 views
0

在我的應用程序有兩種形式讓我們說,LoginForm的和AccountForm如何在不關閉整個程序的情況下關閉窗口?

的LoginForm的設置爲主要形式,它的形式,當用戶能夠從他的賬戶登錄(二TEdits和登錄按鈕) 。當用戶鍵入他的登錄詳細信息並連接時,會打開一個新帳戶AccountForm。

如何在不關閉整個應用程序的情況下在登錄成功時關閉LoginForm?或者以這種語言如何使用下面的代碼來關閉登錄表單而不是應用程序。

if (not IncludeForm.sqlquery1.IsEmpty) and (isblacklisted='0') and (isactivated='1') then 
begin // Login Successful *** Show the account window 
AccountForm.Show; 
LoginFrom.Close; // <----The problem is in this line, using this line causes the whole application to close***} 
end; 

三江源

+0

賞金: 「尋找一個答案從可信和/或官方渠道畫畫。」我很可信。 ;-) – GolezTrol 2012-08-16 10:27:57

回答

6

您可以通過Zarko Gajic 獲取here優秀文章Display a LogIn/Password Dialog Before the Main Form is Created的源代碼。

摘錄:

program PasswordApp; 

uses 
    Forms, 
    main in 'main.pas' {MainForm}, 
    login in 'login.pas' {LoginForm}; 

{$R *.res} 

begin 
    if TLoginForm.Execute then 
    begin 
    Application.Initialize; 
    Application.CreateForm(TMainForm, MainForm) ; 
    Application.Run; 
    end 
    else 
    begin 
    Application.MessageBox('You are not authorized to use the application. The password is "delphi".', 'Password Protected Delphi application') ; 
    end; 
end. 
+1

+1向TLogin表單添加Execute方法是有意義的。既然它是一個非常具體的形式,類方法就可以做,但我寧願讓它成爲一個更符合其他對話框的實例方法。儘管如此,一個很好的解來自delphi.about.com的文章通常是有意義的。 :) – GolezTrol 2012-08-16 10:31:53

10

不要讓LoginForm的主要形式。如果使用 LoginForm := TLoginForm.Create而不是Application.CreateForm創建登錄表單,則不會將表單設置爲應用程序主表單。使用Application.CreateForm創建的第一個表單將成爲主表單。 您可以編輯您的項目文件(.dpr)來改變這樣的:

program YourApp; 

uses 
    Forms, 
    fLoginForm in 'fLoginForm.pas' {LoginForm}, 
    fMainForm in 'fMainForm.pas' {MainForm}; 

{$R *.res} 

begin 
    Application.Initialize; 
    Application.MainFormOnTaskbar := True; 
    with TLoginForm.Create(nil) do 
    try 
    ShowModal; 
    finally 
    Free; 
    end; 
    Application.CreateForm(TMainForm, MainForm); 
    Application.Run; 
end. 

您還可以創建自己的應用程序的主循環來檢查被打開的具體形式,但是這是一個有點困難,多一點比上面的解決方案脆弱。

+6

+1這是'TMyObject.Create(..)do'運行良好的一個很好的例子。你主動不想要一個變量,這樣你就可以確定它從來沒有被引用超過這個小塊。指出在fLoginForm中自動創建的'LoginForm:TLoginForm'變量應該被刪除。 – 2012-01-09 18:31:12

+2

我會爲TLoginForm添加某種邏輯,即:'if(ShowModal = mrOK)then ...'只有當登錄成功時,您才需要創建'MainForm'。 – kobik 2012-01-09 22:29:55

+0

@kobik。也許,雖然應用程序可能仍然希望用略有不同的UI顯示主窗體。例如,登錄表單可能會調用Application.Terminate,從而導致主窗體永遠不會顯示。但我不得不承認,我甚至沒有試圖在我的回答中解決這個問題。 – GolezTrol 2012-08-15 08:06:46

相關問題