分享兩個 WinForms 開發常見情境的實用解法:帶登入視窗的應用程式啟動流程控制、將 Enter 鍵轉為 Tab 鍵實現欄位間快速導航。
預設 Main() 直接啟動主視窗:
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMain());
}
Application.Run(new frmMain())Load 事件中隱藏自己 (this.Hide()),以 ShowDialog() 顯示登入視窗this.Show() 顯示主視窗Application.Exit()優點:不修改 Main,主視窗始終載入;缺點:登入失敗也已載入主視窗資源。
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
frmLogin login = new frmLogin();
login.ShowDialog(); // 必須用 ShowDialog 才會阻塞
if (login.HasLogin)
{
login.Close();
Application.Run(new frmMain());
}
else
{
Application.Exit();
}
}
優點:登入失敗直接結束,不載入主視窗資源;ShowDialog() 確保同步等待登入結果。
private void txt_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13) // Enter
{
// nextControl.Focus(); 或
SendKeys.Send("{TAB}");
}
}
適用:控制項需額外邏輯(如驗證、格式化)時。
private void my_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
SendKeys.Send("{TAB}");
}
KeyPress 同指向此處理函式ctrl.KeyPress += my_KeyPress優點:程式碼集中、動態控制項友善;缺點:難以處理個別控制項的特殊需求。
根據專案需求選擇:靜態表單且欄位邏輯各異用策略 1,動態表單或統一導航行為用策略 2。