記得很久之前要用C#做個需要登錄的小東西,自己之前完全沒有編寫WinForm的經驗,整個過程中,自己感覺應該怎么寫就怎么寫,時常導致許多邏輯性的錯誤,比如在做這個登錄窗口的時候,應該實現的效果是,用戶啟動程序,首先顯示登錄窗口,由用戶輸入用戶名和密碼等登錄信息,然后如果點擊登錄按鈕則驗證用戶名和密碼的正確性,如正確則調出程序主窗口,如果點擊取消按鈕則關閉程序,自己第一次的時候首先設計了個登錄窗口LoginForm,兩個按鈕CancelButton和OKButton,然后分別添加各自的Click事件,OKButton的Click事件中驗證用戶信息的正確性,並返回驗證結果,如果正確就new一個主窗口MainForm,這個時候程序的主函數Main中要這樣寫:Application.run(new LoginForm());這樣最后導致的結果就是感覺所有的事情都要LoginForm去做,導致它過於臃腫,本來我們的重心應該在MainForm中的;下面的做法就很好的避免了這個邏輯錯誤;
第一步:設計一個登錄窗口LoginForm,內含兩個按鈕CancelButton和OKButton,還有具體的內容輸入框,如textBoxID和textBoxPassword,另設相對應的類成員用來接受輸入框中的內容,如UserName和PassWord,只需要添加OKButton的Click事件,如下:
private void OKButton_Click(object sender, EventArgs e)
{
PassWord = textBoxPassword.Text;
UserName = textBoxID.Text;
}
還要在LoginForm.Designer.cs的InitializeComponent方法中添加兩者的屬性,分別為:
this.OKButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.Cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
這樣LoginForm就完事了,怎么樣,這樣的話LoginForm夠簡潔吧。。。。。
第二步:設計主窗口,這才是我們工作的重心,怎么做看具體情況,這里就不討論了,這里只說下和上面登錄窗口相關聯的部分,我們只需要在MainForm的MainForm_Load方法中寫下如下代碼即可:
private void MainForm_Load(object sender, EventArgs e)
{
LoginForm formLogin = new LoginForm();
if(formLogin.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
{
string userName = formLogin.UserName;
string password = formLogin.PassWord;
formLogin.Dispose();
}
else
{
formLogin.Dispose();
this.Dispose();
}
}
就這樣就基本可以了,注意這里是用到了模式化窗口的方法ShowDilog,參數this表示MainForm是LoginForm的父窗口,這里就用到ShowDilog的返回值,就是上面設置的兩個按鈕的DialogResult屬性。
總之,感覺這才是真正的登錄類窗口設計的正統方法,我才掌握,真是太羞愧了。