using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace SocketExample { /// /// LoginWindow.xaml 的交互逻辑 /// public partial class LoginWindow : Window { // 定义事件 public event Action LoginSuccess; public event Action LoginFailed; // 最大尝试次数 private const int MAX_ATTEMPTS = 2; // 当前尝试次数 private int _attemptCount = 0; // 正确的用户名和密码(实际应用中应从数据库或配置中读取) private const string CORRECT_USERNAME = "haiweiadmin"; private const string CORRECT_PASSWORD = "haiweinb123"; public LoginWindow() { InitializeComponent(); UpdateAttemptsDisplay(); // 设置焦点到用户名输入框 txtUsername.Focus(); // 绑定回车键事件 txtPassword.KeyDown += OnPasswordKeyDown; } private void OnPasswordKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Enter) { AttemptLogin(); } } private void btnLogin_Click(object sender, RoutedEventArgs e) { AttemptLogin(); } private void btnCancel_Click(object sender, RoutedEventArgs e) { // 取消登录,关闭程序 LoginFailed?.Invoke(); this.Close(); } private void AttemptLogin() { string username = txtUsername.Text.Trim(); string password = txtPassword.Password; // 验证输入 if (string.IsNullOrWhiteSpace(username) || string.IsNullOrWhiteSpace(password)) { ShowError("用户名和密码不能为空!"); return; } // 验证用户名和密码 if (username == CORRECT_USERNAME && password == CORRECT_PASSWORD) { // 登录成功 LoginSuccess?.Invoke(); this.Close(); } else { // 登录失败 _attemptCount++; UpdateAttemptsDisplay(); if (_attemptCount >= MAX_ATTEMPTS) { // 超过最大尝试次数 MessageBox.Show($"登录失败超过{MAX_ATTEMPTS}次,程序即将关闭!", "登录失败", MessageBoxButton.OK, MessageBoxImage.Error); LoginFailed?.Invoke(); this.Close(); } else { ShowError($"用户名或密码错误!剩余尝试次数:{MAX_ATTEMPTS - _attemptCount}"); txtPassword.Password = ""; txtPassword.Focus(); } } } private void ShowError(string message) { lblError.Text = message; lblError.Visibility = Visibility.Visible; } private void UpdateAttemptsDisplay() { int remainingAttempts = MAX_ATTEMPTS - _attemptCount; lblAttempts.Text = remainingAttempts > 0 ? $"剩余尝试次数:{remainingAttempts}" : "已超过最大尝试次数"; } protected override void OnClosed(EventArgs e) { base.OnClosed(e); // 清理事件绑定 txtPassword.KeyDown -= OnPasswordKeyDown; } } }