首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET 2.0 WinForms 開發實戰經驗:啟動登入控制與 Enter 鍵導航技巧

     編輯:關於.NET

分享兩個 WinForms 開發常見情境的實用解法:帶登入視窗的應用程式啟動流程控制、將 Enter 鍵轉為 Tab 鍵實現欄位間快速導航。

一、帶登入視窗的啟動控制:兩種模式

預設 Main() 直接啟動主視窗:

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new frmMain());
}

模式 A:Main 啟動主視窗,載入時攔截顯示登入

  • Application.Run(new frmMain())
  • 主視窗 Load 事件中隱藏自己 (this.Hide()),以 ShowDialog() 顯示登入視窗
  • 登入成功 → 關閉登入視窗、this.Show() 顯示主視窗
  • 登入失敗 → Application.Exit()

優點:不修改 Main,主視窗始終載入;缺點:登入失敗也已載入主視窗資源。

模式 B: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() 確保同步等待登入結果。

二、Enter 鍵導航轉 Tab 鍵:兩種實作策略

策略 1:個別控制項掛 KeyPress 事件 (精細控制)

private void txt_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == 13) // Enter
    {
        // nextControl.Focus(); 或
        SendKeys.Send("{TAB}");
    }
}

適用:控制項需額外邏輯(如驗證、格式化)時。

策略 2:多控制項共用單一 KeyPress 事件 (動態建立控制項首選)

private void my_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == 13)
        SendKeys.Send("{TAB}");
}
  • 設計時:多個控制項的 KeyPress 同指向此處理函式
  • 執行時:動態建立控制項後 ctrl.KeyPress += my_KeyPress

優點:程式碼集中、動態控制項友善;缺點:難以處理個別控制項的特殊需求。

根據專案需求選擇:靜態表單且欄位邏輯各異用策略 1,動態表單或統一導航行為用策略 2。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved