2014-12-21 40 views
0

我正在申請,我有2個表單。主窗體(主應用程序)和登錄窗體將啓動。如果用戶有一個API密鑰,它會檢查,如果它是正確的,它應該隱藏登錄表單並顯示主窗體。如果不正確或者用戶完全沒有api密鑰,則應該繼續顯示登錄表單,如果登錄詳細信息是正確的,則應該隱藏登錄表單並顯示主表單。C#表單不隱藏

如果我登錄並且我的詳細信息是正確的,登錄窗口將被隱藏並顯示主窗體,但是,如果我有API密鑰並且它是正確的,它不會隱藏登錄窗體。

這是當我的登錄信息是正確的:

case "True": 
string apiToken = subparts[0]; 

RegistryKey key = Registry.CurrentUser.CreateSubKey("Prtscreen"); 
key.SetValue("API_TOKEN", subparts[0]); 
key.Close(); 

MessageBox.Show("Logged in as " + username.Text); 

UserDetails.UserName = username.Text; 
UserDetails.APIKey = subparts[0]; 

this.Hide(); 
new MainForm().Show(); 
break; 

會發生什麼:我的信息是正確的,登錄窗口「消失」和主要形式顯示。現在這是當我有一個API密鑰,它是正確的:

UserDetails.UserName = result.Split('|')[1]; 
UserDetails.APIKey = value.ToString(); 

this.Hide(); 
Program.MainForm = new MainForm(); 
Program.MainForm.Show(); 

return true; 

但由於某種原因,它不會隱藏登錄窗口。這兩個代碼都在登錄表單代碼文件中。我不知道有什麼不同。

+0

你能告訴我們更多的代碼嗎,很難看到這裏發生了什麼。我們似乎在切換案例陳述中? – KingCronus

+0

這只是關於顯示和隱藏不工作的窗體。上述兩個代碼都具有相同的代碼(用於顯示和隱藏,至少隱藏),但對於第二個代碼,它不會隱藏登錄表單,而在第一個代碼中卻是這樣。 –

+0

那麼,爲什麼每次都以不同的方式創建Show()代碼呢?程序的使用必須具有一定的意義。此外,這是否發生在Form_Load? – KingCronus

回答

0

我不認爲一個形式可以改變它的知名度或者在自己的Load事件呼籲本身顯示/隱藏。爲了快速修復,您可以使用計時器來暫時延遲檢查,直到表單完成加載。在timer elapsed/tick事件中,這就是您要調用CheckAPI方法的地方。