帶有登錄窗口的Window程序啟動控制
默認的Main函數是
[STAThread]
static void Main()
{
ApplicationEnableVisualStyles();
ApplicationSetCompatibleTextRenderingDefault(false);
ApplicationRun(new frmMain());
}
關鍵的是ApplicationRun(new frmMain());這一句如果Run函數裡是主窗口則就要另外想辦法在主窗口顯示之前讓用戶登錄如果Run函數裡創建的是登錄窗口則登錄窗口完成其登錄工作之後就只能隱藏而不能關閉否則整個應用程序就結束了
解決這種問題主要有兩種方法
)ApplicationRun(new frmMain());函數裡創建主窗口在主窗口加載後顯示之前使之隱藏並顯示登錄窗口如果登錄成功則關閉登錄窗口顯示主窗口如果登錄失敗則結束應用程序這樣處理有一個小問題就是要無論登錄是否成功實際都要加載主窗口的好處是不用修改Main函數對一些用戶來說可能更好控制一些
)修改Main函數使之在ApplicationRun(new frmMain());之前進行登錄驗證登錄成功則正常運行登錄失敗則結束應用程序大體過程如下
[STAThread]
static void Main()
{
ApplicationEnableVisualStyles();
ApplicationSetCompatibleTextRenderingDefault(false);
frmLogin login = new frmLogin();
loginShowDialog(); // 注意這個地方只能是ShowDialog而不能是Show
if(loginHasLogin) // 判斷是否登錄成功
{
loginClose();
ApplicationRun(new frmMain());
}
else
{
ApplicationExit();
}
}
這樣做的好處是在登錄失敗時直接關閉應用程序而無需加載主窗口
實際兩種方法都可以達到相同的目的
回車鍵按下時處理成等同於按下Tab鍵
常用的處理方法有兩個
)響應每一個要處理的控件的keypress事件在該事件中判斷如果按下的是回車讓下一個控件獲得焦點代碼如下
private void txt_KeyPress(object sender KeyPressEventArgs e)
{
if(eKeyChar == )
{
// nextControlFocus(); // 使下一個控件獲得焦點
SendKeysSend({tab}); // 這樣也是可以的
}
}
)所有要把回車處理成Tab的控件共享一個keypress事件當按下的是回車時發送一個tab鍵代碼如下
private void my_KeyPress(object sender
KeyPressEventArgs e)
{
if (e
KeyChar ==
)
{
SendKeys
Send(
{tab}
);
}
}
第一種處理方式是針對每一個控件寫事件其好處是更好控制尤其是在除處理回車按鍵外還要實現其他功能時就只能這樣處理第二種方式的好處是可以多個控件共享同一個事件特別是在動態創建控件時而對每個控件只處理回車時可以動態的把事件掛到控件上這樣就更顯示出這種方式的優勢不足是對控件除要處理回車外還要有其他個性功能時就很難實現
用戶可以根據實現情況進行選擇使用
From:http://tw.wingwit.com/Article/program/net/201311/15567.html