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

C# WinForms 登錄頁面實現:從 UI 佈局到數據庫驗證與主窗體傳值

     編輯:關於C語言

C# WinForms 登錄頁面實現:從 UI 佈局到數據庫驗證與主窗體傳值

本文完整記錄一個典型的 C# Windows Forms 登錄模塊開發流程:界面設計、輸入驗證、數據庫交互、登錄成功後的主窗體跳轉與用戶名傳遞,以及省市區三級聯動下拉框的實現。

一、登錄界面佈局

  • 兩個 Label(用戶名、密碼)+ 兩個 TextBox;
  • 密碼框設置 UseSystemPasswordChar = true 顯示黑點;
  • 一個 Button(Text="登錄");
  • 表單屬性 AcceptButton = button1,支援 Enter 鍵觸發登錄。

二、登錄邏輯與數據庫驗證

1. 分層架構

// 數據訪問層
public class LoginDA {
    public bool Denglu(string uid, string pwd) {
        // 實際項目中使用參數化 SQL 防注入
        string sql = "SELECT COUNT(*) FROM Users WHERE Username=@u AND Password=@p";
        // 執行查詢返回 bool
    }
}

2. 登錄按鈕點擊事件

private void button1_Click(object sender, EventArgs e) {
    string uid = textuid.Text.Trim();
    string pwd = textpwd.Text;

    if (string.IsNullOrEmpty(uid) || string.IsNullOrEmpty(pwd)) {
        MessageBox.Show("用戶名和密碼不能為空!");
        return;
    }

    var da = new LoginDA();
    if (da.Denglu(uid, pwd)) {
        // 登錄成功:傳遞用戶名給主窗體
        this.username = uid;              // 保存到成員變量
        this.DialogResult = DialogResult.OK; // 設置對話框結果
        this.Close();                     // 關閉登錄頁
    } else {
        MessageBox.Show("用戶名或密碼錯誤!");
    }
}

三、Program.cs 入口修改

static void Main() {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    
    using (var login = new Login()) {
        if (login.ShowDialog() == DialogResult.OK) {
            Application.Run(new Main(login.username)); // 傳遞用戶名構造主窗體
        }
    }
}

四、主窗體接收用戶名(構造函數重載)

public partial class Main : Form {
    public Main() { InitializeComponent(); }  // 無參構造(設計器用)
    
    public Main(string username) : this() {   // 重載構造
        // 可在此處顯示歡迎信息:lblWelcome.Text = $"歡迎, {username}";
    }
}

五、省市區三級聯動下拉框

數據模型

public class Region {
    public string Code { get; set; }  // 編碼
    public string Name { get; set; }  // 名稱
    public string ParentCode { get; set; } // 父級編碼
}

數據訪問類

public class RegionDA {
    public List<Region> GetChildren(string parentCode) {
        // SELECT Code, Name FROM Regions WHERE ParentCode = @parentCode
    }
}

主窗體綁定邏輯

private RegionDA rda = new RegionDA();

private void Main_Load(object sender, EventArgs e) {
    FillSheng();  // 省
}

private void FillSheng() {
    var list = rda.GetChildren("0001"); // 頂級編碼
    cmbSheng.DataSource = list;
    cmbSheng.DisplayMember = "Name";
    cmbSheng.ValueMember = "Code";
}

private void cmbSheng_SelectedIndexChanged(object sender, EventArgs e) {
    FillShi(cmbSheng.SelectedValue.ToString());
}

private void FillShi(string parentCode) {
    var list = rda.GetChildren(parentCode);
    cmbShi.DataSource = list;
    cmbShi.DisplayMember = "Name";
    cmbShi.ValueMember = "Code";
}

private void cmbShi_SelectedIndexChanged(object sender, EventArgs e) {
    FillQu(cmbShi.SelectedValue.ToString());
}

private void FillQu(string parentCode) {
    var list = rda.GetChildren(parentCode);
    cmbQu.DataSource = list;
    cmbQu.DisplayMember = "Name";
    cmbQu.ValueMember = "Code";
}

六、關鍵點總結

  1. 密碼框掩碼:UseSystemPasswordChar;
  2. Enter 登錄:表單 AcceptButton;
  3. 跨窗體傳值:構造函數重載 + ShowDialog() 返回 DialogResult;
  4. 三級聯動:SelectedIndexChanged 事件鏈 + SelectedValue 獲取父級編碼;
  5. 數據綁定:DataSource + DisplayMember/ValueMember 分離顯示與實際值。

此模式可直接擴展至權限管理、記住密碼、自動登錄等進階功能,是 WinForms 業務系統的標準起手式。

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