2013-04-21 53 views
-1

我正在構建一個具有初始登錄窗體的應用程序,如果用戶被授權,此窗體(登錄)應該關閉並且應用程序主窗體應該打開。建議如何打開新表單並關閉當前/第一表單?

我檢查SO的問題,這將有助於我發現很多相關的問題,但我想不出我應該使用哪種技術,所以我在這裏問。什麼是推薦的方式來打開一個新的表格並關閉當前?

我看到有人建議OP創建一個新線程,其他人建議使用「嚮導」(我不知道它是什麼,但如果這是最好的方式,請給我一些資源來學習)。

我試着通過關閉第一和打開第二去做,但在應用程序關閉。

this指的是第一種形式。

this.Close(); 
FormSecond f = new FormSecond(); 
f.Show(); 

回答

4

如果用戶被授權此表單(登錄)應該關閉並且應用程序主窗體應該打開。

建議編號1,2和3強烈地指向而不是這樣做。將您自己的身份驗證層添加到Windows已經提供的身份驗證層從來就不是錯誤。你會從來沒有得到它作爲安全和測試作爲Windows登錄。而且存在嚴重的安全風險,用戶將重新使用他們的登錄密碼。如果您需要任何超出Environment.UserName和用戶所屬組的登錄信息,則可以使用System.DirectoryServices命名空間從域控制器獲取該信息。

但是,你會對風警告。樣板解決方案是修改Program.cs中的Main()方法,並使用ShowDialog()顯示登錄表單。當登錄狀態良好時應該返回DialogResult.OK,如果不是,則返回DialogResult.Cancel。您可以使用這樣的:

[STAThread] 
    static void Main() { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     using (var login = new LoginForm()) { 
      if (login.ShowDialog() != DialogResult.OK) return; 
     } 
     Application.Run(new Form1()); 
    } 
+0

我不明白這一點。確認用戶後,我想顯示Frommain。但我沒有得到這個「使用(var login = new LoginForm()){(login.ShowDialog()!= DialogResult.OK)return; } 我改變了我的form1到我的表單main,但它不起作用,提到的代碼是做什麼的?我怎樣才能解決這個問題? – chathwind 2015-01-26 12:04:35

-2

如果從登錄表單開始並關閉它,則不再有任何線程可以運行。所以(其中之一)解決方案是運行不同的初始表單並使該表單啓動登錄表單。一旦登錄表單不再有用,您可以關閉該表單並將控制返回到初始表單。然後,您可以根據初始表單生成任何形式的表單。

+0

每個表單值不一定有自己的線程,有一個共享的UI線程。 – Blorgbeard 2013-04-21 19:25:36

+0

「Imagine」是這裏的關鍵詞。 – 2013-04-21 19:26:21

+1

想象沒有窗體...並且沒有代碼太...我不知道你是否可以... – Timmerz 2013-04-21 19:48:47

-1

這是你如何做到這一點:

FormSecond f = new FormSecond(); 
f.Show(); 
this.Close(); 
相關問題