本文完整記錄一個典型的 C# Windows Forms 登錄模塊開發流程:界面設計、輸入驗證、數據庫交互、登錄成功後的主窗體跳轉與用戶名傳遞,以及省市區三級聯動下拉框的實現。
Label(用戶名、密碼)+ 兩個 TextBox;UseSystemPasswordChar = true 顯示黑點;Button(Text="登錄");AcceptButton = button1,支援 Enter 鍵觸發登錄。// 數據訪問層
public class LoginDA {
public bool Denglu(string uid, string pwd) {
// 實際項目中使用參數化 SQL 防注入
string sql = "SELECT COUNT(*) FROM Users WHERE Username=@u AND Password=@p";
// 執行查詢返回 bool
}
}
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("用戶名或密碼錯誤!");
}
}
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";
}
UseSystemPasswordChar;AcceptButton;ShowDialog() 返回 DialogResult;SelectedIndexChanged 事件鏈 + SelectedValue 獲取父級編碼;DataSource + DisplayMember/ValueMember 分離顯示與實際值。此模式可直接擴展至權限管理、記住密碼、自動登錄等進階功能,是 WinForms 業務系統的標準起手式。