using System; using System.Drawing; using System.Windows.Forms; namespace StandardScene.Charge { /// /// 充电策略配置窗体 /// public partial class ChargeStrategyConfigForm : Form { private ChargeStrategyConfig config; private ChargeStrategyConfigService configService; public ChargeStrategyConfigForm() { InitializeComponent(); configService = ChargeStrategyConfigService.Instance; InitializeForm(); } private void InitializeForm() { this.Text = "充电策略配置"; this.Size = new Size(800, 700); this.StartPosition = FormStartPosition.CenterScreen; this.MinimumSize = new Size(700, 600); this.FormBorderStyle = FormBorderStyle.FixedDialog; this.MaximizeBox = false; // 加载配置 LoadConfig(); } /// /// 加载配置到界面 /// private void LoadConfig(bool isDef = false) { try { if (!isDef) { config = configService.LoadConfig(); } // SOC 相关参数 numMustChargeSoc.Value = (decimal)config.MustChargeSoc; numIdleChargeSoc.Value = (decimal)config.IdleChargeSoc; numTaskAvailableSoc.Value = (decimal)config.TaskAvailableSoc; numFullChargeSoc.Value = (decimal)config.FullChargeSoc; numAllowInterruptSoc.Value = (decimal)config.AllowInterruptSoc; // 时间相关参数 numIdleChargeSeconds.Value = (decimal)config.IdleChargeSeconds; numIdleSeconds.Value = (decimal)config.IdleSeconds; numMustChargeSeconds.Value = (decimal)config.MustChargeSeconds; numTopUpMinutes.Value = (decimal)config.TopUpMinutes; // 任务相关参数 numMinAllowFreeCarToChargeTaskCnt.Value = config.MinAllowFreeCarToChargeTaskCnt; // 开关参数 chkAllowInterruptTask.Checked = config.AllowInterruptTask; chkUseLowerSocForCharge.Checked = config.UseLowerSocForCharge; chkEnableErrorChargeDetection.Checked = config.EnableErrorChargeDetection; chkUseChargeSiteFilter.Checked = config.UseChargeSiteFilter; lblStatus.Text = "配置加载成功"; lblStatus.ForeColor = Color.Green; } catch (Exception ex) { MessageBox.Show($"加载配置失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); lblStatus.Text = "配置加载失败"; lblStatus.ForeColor = Color.Red; } } /// /// 从界面保存配置 /// private void SaveConfig() { try { // SOC 相关参数 config.MustChargeSoc = (double)numMustChargeSoc.Value; config.IdleChargeSoc = (double)numIdleChargeSoc.Value; config.TaskAvailableSoc = (double)numTaskAvailableSoc.Value; config.FullChargeSoc = (double)numFullChargeSoc.Value; config.AllowInterruptSoc = (double)numAllowInterruptSoc.Value; // 时间相关参数 config.IdleChargeSeconds = (double)numIdleChargeSeconds.Value; config.IdleSeconds = (double)numIdleSeconds.Value; config.MustChargeSeconds = (double)numMustChargeSeconds.Value; config.TopUpMinutes = (double)numTopUpMinutes.Value; // 任务相关参数 config.MinAllowFreeCarToChargeTaskCnt = (int)numMinAllowFreeCarToChargeTaskCnt.Value; // 开关参数 config.AllowInterruptTask = chkAllowInterruptTask.Checked; config.UseLowerSocForCharge = chkUseLowerSocForCharge.Checked; config.EnableErrorChargeDetection = chkEnableErrorChargeDetection.Checked; config.UseChargeSiteFilter = chkUseChargeSiteFilter.Checked; // 保存到文件 configService.SaveConfig(config); lblStatus.Text = "配置保存成功"; lblStatus.ForeColor = Color.Green; MessageBox.Show("充电策略配置保存成功!", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { MessageBox.Show($"保存配置失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); lblStatus.Text = "配置保存失败"; lblStatus.ForeColor = Color.Red; } } /// /// 恢复默认配置 /// private void RestoreDefaults() { var result = MessageBox.Show( "确定要恢复默认配置吗?当前配置将被覆盖。", "确认恢复", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) { config = ChargeStrategyConfig.CreateDefault(); LoadConfig(true); lblStatus.Text = "已恢复默认配置(未保存)"; lblStatus.ForeColor = Color.Blue; } } /// /// 验证配置参数 /// private bool ValidateConfig() { // 验证 SOC 范围 if (numMustChargeSoc.Value >= numIdleChargeSoc.Value) { MessageBox.Show("必充电量必须小于空闲充电电量", "验证失败", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } if (numTaskAvailableSoc.Value <= numMustChargeSoc.Value) { MessageBox.Show("任务可用电量必须大于必充电量", "验证失败", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } if (numFullChargeSoc.Value < numIdleChargeSoc.Value) { MessageBox.Show("满电电量必须大于等于空闲充电电量", "验证失败", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } if (numAllowInterruptSoc.Value <= numMustChargeSoc.Value) { MessageBox.Show("允许中断电量必须大于必充电量", "验证失败", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } return true; } // ==================== 事件处理 ==================== private void btnSave_Click(object sender, EventArgs e) { if (ValidateConfig()) { SaveConfig(); } } private void btnCancel_Click(object sender, EventArgs e) { this.Close(); } private void btnRestoreDefaults_Click(object sender, EventArgs e) { RestoreDefaults(); } private void btnApply_Click(object sender, EventArgs e) { if (ValidateConfig()) { SaveConfig(); } } } }