From f5e3f28e4a8538b8f0eb4a1d681f2c128ae46015 Mon Sep 17 00:00:00 2001 From: WangHaonie <68315280+WangHaonie@users.noreply.github.com> Date: Sun, 12 Jan 2025 00:14:34 +0800 Subject: [PATCH] =?UTF-8?q?v3.0.9:=20=F0=9F=9B=A0=EF=B8=8F=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E4=BA=86=E5=BC=B9=E5=87=BA=E6=B6=88=E6=81=AF=E6=A1=86?= =?UTF-8?q?=E7=9A=84=E6=96=B9=E6=B3=95=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CEETimerCSharpWinForms/Controls/AppForm.cs | 2 +- .../Dialogs/CustomTextDialog.cs | 4 ++-- CEETimerCSharpWinForms/Dialogs/RuleDialog.cs | 8 ++++---- .../Dialogs/RulesManager.cs | 4 ++-- .../Forms/DownloaderForm.cs | 4 ++-- CEETimerCSharpWinForms/Forms/MainForm.cs | 2 +- CEETimerCSharpWinForms/Forms/SettingsForm.cs | 18 ++++++++--------- CEETimerCSharpWinForms/Modules/AppLauncher.cs | 12 +++++------ CEETimerCSharpWinForms/Modules/MessageX.cs | 20 +++++++------------ .../Modules/UpdateChecker.cs | 6 +++--- 10 files changed, 37 insertions(+), 43 deletions(-) diff --git a/CEETimerCSharpWinForms/Controls/AppForm.cs b/CEETimerCSharpWinForms/Controls/AppForm.cs index a218142..e78bb4a 100644 --- a/CEETimerCSharpWinForms/Controls/AppForm.cs +++ b/CEETimerCSharpWinForms/Controls/AppForm.cs @@ -129,7 +129,7 @@ protected void Adjust(Action Adjustment) /// 执行 忽略更改 的代码 protected void ShowUnsavedWarning(string WarningMsg, FormClosingEventArgs e, Action SaveChanges, Action IgnoreChanges) { - switch (MessageX.Popup(WarningMsg, MessageLevel.Warning, Buttons: MessageBoxExButtons.YesNo)) + switch (MessageX.Warn(WarningMsg, Buttons: MessageBoxExButtons.YesNo)) { case DialogResult.Yes: e.Cancel = true; diff --git a/CEETimerCSharpWinForms/Dialogs/CustomTextDialog.cs b/CEETimerCSharpWinForms/Dialogs/CustomTextDialog.cs index 010de93..92fb548 100644 --- a/CEETimerCSharpWinForms/Dialogs/CustomTextDialog.cs +++ b/CEETimerCSharpWinForms/Dialogs/CustomTextDialog.cs @@ -61,9 +61,9 @@ protected override void OnButtonAClicked() P3TextRaw = RemoveInvalid(TextBoxP3.Text); string[] tmp = [P1TextRaw, P2TextRaw, P3TextRaw]; - if (!(bool)CustomRuleHelper.CheckCustomText(tmp, out string Error) && !string.IsNullOrWhiteSpace(Error)) + if (!(bool)CustomRuleHelper.CheckCustomText(tmp, out string ErrorMsg) && !string.IsNullOrWhiteSpace(ErrorMsg)) { - MessageX.Popup(Error, MessageLevel.Error); + MessageX.Error(ErrorMsg); return; } diff --git a/CEETimerCSharpWinForms/Dialogs/RuleDialog.cs b/CEETimerCSharpWinForms/Dialogs/RuleDialog.cs index 5cea09f..f7f0359 100644 --- a/CEETimerCSharpWinForms/Dialogs/RuleDialog.cs +++ b/CEETimerCSharpWinForms/Dialogs/RuleDialog.cs @@ -95,19 +95,19 @@ protected override void OnButtonAClicked() if (!ColorHelper.IsNiceContrast(_Fore, _Back)) { - MessageX.Popup("选择的颜色相似或对比度较低,将无法看清文字。\n\n请尝试更换其它背景颜色或文字颜色!", MessageLevel.Error); + MessageX.Error("选择的颜色相似或对比度较低,将无法看清文字。\n\n请尝试更换其它背景颜色或文字颜色!"); return; } if (NudDays.Value == 0 && NudHours.Value == 0 && NudMinutes.Value == 0 && NudSeconds.Value == 0) { - MessageX.Popup("时刻不能为0,请重新设置!", MessageLevel.Error); + MessageX.Error("时刻不能为0,请重新设置!"); return; } - if (!(bool)CustomRuleHelper.CheckCustomText([TextBoxCustomText.Text], out string Error, ToBoolean: true) && !string.IsNullOrWhiteSpace(Error)) + if (!(bool)CustomRuleHelper.CheckCustomText([TextBoxCustomText.Text], out string ErrorMsg, ToBoolean: true) && !string.IsNullOrWhiteSpace(ErrorMsg)) { - MessageX.Popup(Error, MessageLevel.Error); + MessageX.Error(ErrorMsg); return; } diff --git a/CEETimerCSharpWinForms/Dialogs/RulesManager.cs b/CEETimerCSharpWinForms/Dialogs/RulesManager.cs index a15fc89..90c23ef 100644 --- a/CEETimerCSharpWinForms/Dialogs/RulesManager.cs +++ b/CEETimerCSharpWinForms/Dialogs/RulesManager.cs @@ -87,7 +87,7 @@ private void ListViewMain_KeyDown(object sender, KeyEventArgs e) private void ContextDelete_Click(object sender, EventArgs e) { - if (MessageX.Popup("确认删除所选规则吗?此操作将不可撤销!", MessageLevel.Warning, Buttons: MessageBoxExButtons.YesNo) == DialogResult.Yes) + if (MessageX.Warn("确认删除所选规则吗?此操作将不可撤销!", Buttons: MessageBoxExButtons.YesNo) == DialogResult.Yes) { foreach (ListViewItem Item in ListViewMain.SelectedItems) { @@ -150,7 +150,7 @@ private void AddItem(int RuleTypeIndex, string ExamTick, Color Fore, Color Back, { Execute(() => { - if (MessageX.Popup("检测到即将添加的规则与现有的重复,是否覆盖?", MessageLevel.Warning, Buttons: MessageBoxExButtons.YesNo) == DialogResult.Yes) + if (MessageX.Warn("检测到即将添加的规则与现有的重复,是否覆盖?", Buttons: MessageBoxExButtons.YesNo) == DialogResult.Yes) { ModifyOrOverrideItem(Duplicate); return; diff --git a/CEETimerCSharpWinForms/Forms/DownloaderForm.cs b/CEETimerCSharpWinForms/Forms/DownloaderForm.cs index 62649f5..a11f609 100644 --- a/CEETimerCSharpWinForms/Forms/DownloaderForm.cs +++ b/CEETimerCSharpWinForms/Forms/DownloaderForm.cs @@ -107,7 +107,7 @@ private async Task DownloadUpdate() if (ex is not TaskCanceledException) { - MessageX.Popup($"无法下载更新文件!{ex.ToMessage()}", MessageLevel.Error); + MessageX.Error($"无法下载更新文件!{ex.ToMessage()}"); LabelDownloading.Text = "下载失败,你可以点击 重试 来重新启动下载。"; LabelSize.Text = "已下载/总共: N/A"; LabelSpeed.Text = "下载速度: N/A"; @@ -141,7 +141,7 @@ private void ButtonCancel_Click(object sender, EventArgs e) cts?.Cancel(); LabelDownloading.Text = "用户已取消下载。"; IsCancelled = true; - MessageX.Popup("你已取消下载!\n\n稍后可以在 关于 窗口点击图标来再次检查更新。", MessageLevel.Warning); + MessageX.Warn("你已取消下载!\n\n稍后可以在 关于 窗口点击图标来再次检查更新。"); } Close(); diff --git a/CEETimerCSharpWinForms/Forms/MainForm.cs b/CEETimerCSharpWinForms/Forms/MainForm.cs index 4419bff..94518bf 100644 --- a/CEETimerCSharpWinForms/Forms/MainForm.cs +++ b/CEETimerCSharpWinForms/Forms/MainForm.cs @@ -294,7 +294,7 @@ private void ContextSettings_Click(object sender, EventArgs e) UserCustomRules = CustomRules }; - FormSettings.ConfigChanged += (sender,e) => RefreshSettings(); + FormSettings.ConfigChanged += (sender, e) => RefreshSettings(); } FormSettings.ReActivate(); diff --git a/CEETimerCSharpWinForms/Forms/SettingsForm.cs b/CEETimerCSharpWinForms/Forms/SettingsForm.cs index 62ac537..788b7a8 100644 --- a/CEETimerCSharpWinForms/Forms/SettingsForm.cs +++ b/CEETimerCSharpWinForms/Forms/SettingsForm.cs @@ -201,7 +201,7 @@ private void CheckBoxShowEnd_CheckedChanged(object sender, EventArgs e) { if (CheckBoxShowEnd.Checked) { - MessageX.Popup("由于已开启显示考试结束倒计时,请设置考试结束日期和时间。", MessageLevel.Info); + MessageX.Info("由于已开启显示考试结束倒计时,请设置考试结束日期和时间。"); TabControlMain.SelectedTab = TabPageGeneral; DtpExamEnd.Focus(); } @@ -515,7 +515,7 @@ private bool IsSettingsFormatValid() if (string.IsNullOrWhiteSpace(ExamName) || (ExamName.Length is < ConfigPolicy.MinExamNameLength or > ConfigPolicy.MaxExamNameLength)) { - MessageX.Popup("输入的考试名称有误!\n\n请检查输入的考试名称是否太长或太短!", MessageLevel.Error, this, TabControlMain, TabPageGeneral); + MessageX.Error("输入的考试名称有误!\n\n请检查输入的考试名称是否太长或太短!", this, TabControlMain, TabPageGeneral); return false; } @@ -523,7 +523,7 @@ private bool IsSettingsFormatValid() { if (DtpExamEnd.Value <= DtpExamStart.Value) { - MessageX.Popup("考试结束时间必须在开始时间之后!", MessageLevel.Error, this, TabControlMain, TabPageGeneral); + MessageX.Error("考试结束时间必须在开始时间之后!", this, TabControlMain, TabPageGeneral); return false; } else if (ExamTimeSpan.TotalDays > 4) @@ -546,7 +546,7 @@ private bool IsSettingsFormatValid() if (!string.IsNullOrEmpty(UniMsg)) { - var _DialogResult = MessageX.Popup(UniMsg, MessageLevel.Warning, this, TabControlMain, TabPageGeneral, Buttons: MessageBoxExButtons.YesNo); + var _DialogResult = MessageX.Warn(UniMsg, this, TabControlMain, TabPageGeneral, Buttons: MessageBoxExButtons.YesNo); if (_DialogResult is DialogResult.No or DialogResult.None) { @@ -573,7 +573,7 @@ private bool IsSettingsFormatValid() if (ColorCheckMsg != 0) { - MessageX.Popup($"第{ColorCheckMsg}组的颜色相似或对比度较低,将无法看清文字。\n\n请尝试更换其它背景颜色或文字颜色!", MessageLevel.Error, this, TabControlMain, TabPageAppearance); + MessageX.Error($"第{ColorCheckMsg}组的颜色相似或对比度较低,将无法看清文字。\n\n请尝试更换其它背景颜色或文字颜色!", this, TabControlMain, TabPageAppearance); return false; } @@ -584,13 +584,13 @@ private void StartSyncTime() { try { - if (!AppLauncher.IsAdmin) MessageX.Popup("检测到当前用户不具有管理员权限,运行该操作会发生错误。\n\n程序将在此消息框关闭后尝试弹出 UAC 提示框,前提要把系统的 UAC 设置为 \"仅当应用尝试更改我的计算机时通知我\" 或及以上,否则将无法进行授权。\n\n稍后若没有看见提示框,请更改 UAC 设置: 开始菜单搜索 uac", MessageLevel.Warning, this); + if (!AppLauncher.IsAdmin) MessageX.Warn("检测到当前用户不具有管理员权限,运行该操作会发生错误。\n\n程序将在此消息框关闭后尝试弹出 UAC 提示框,前提要把系统的 UAC 设置为 \"仅当应用尝试更改我的计算机时通知我\" 或及以上,否则将无法进行授权。\n\n稍后若没有看见提示框,请更改 UAC 设置: 开始菜单搜索 uac", this); Process SyncTimeProcess = ProcessHelper.RunProcess("cmd.exe", "/c net stop w32time & sc config w32time start= auto & net start w32time && w32tm /config /manualpeerlist:ntp1.aliyun.com /syncfromflags:manual /reliable:YES /update && w32tm /resync && w32tm /resync", AdminRequired: true); SyncTimeProcess.WaitForExit(); var ExitCode = SyncTimeProcess.ExitCode; - MessageX.Popup($"命令执行完成!\n\n返回值为 {ExitCode} (0x{ExitCode:X})\n(0 代表成功,其他值为失败)", MessageLevel.Info, this, TabControlMain, TabPageTools); + MessageX.Info($"命令执行完成!\n\n返回值为 {ExitCode} (0x{ExitCode:X})\n(0 代表成功,其他值为失败)", this, TabControlMain, TabPageTools); } #region 来自网络 /* @@ -603,12 +603,12 @@ private void StartSyncTime() */ catch (Win32Exception ex) when (ex.NativeErrorCode == 1223) { - MessageX.Popup($"授权失败,请在 UAC 对话框弹出时点击 \"是\"。{ex.ToMessage()}", MessageLevel.Error, this, TabControlMain, TabPageTools); + MessageX.Error($"授权失败,请在 UAC 对话框弹出时点击 \"是\"。{ex.ToMessage()}", this, TabControlMain, TabPageTools); } #endregion catch (Exception ex) { - MessageX.Popup($"命令执行时发生了错误。{ex.ToMessage()}", MessageLevel.Error, this, TabControlMain, TabPageTools); + MessageX.Error($"命令执行时发生了错误。{ex.ToMessage()}", this, TabControlMain, TabPageTools); } } diff --git a/CEETimerCSharpWinForms/Modules/AppLauncher.cs b/CEETimerCSharpWinForms/Modules/AppLauncher.cs index 7c652a8..757e390 100644 --- a/CEETimerCSharpWinForms/Modules/AppLauncher.cs +++ b/CEETimerCSharpWinForms/Modules/AppLauncher.cs @@ -52,7 +52,7 @@ public static void StartProgram(string[] args) if (!CurrentExecutableName.Equals(OriginalFileName, StringComparison.OrdinalIgnoreCase)) { - MessageX.Popup($"为了您的使用体验,请不要更改程序文件名! 程序将在该消息框自动关闭后尝试自动恢复到原文件名,若自动恢复失败请手动改回。\n\n当前文件名: {CurrentExecutableName}\n原始文件名: {OriginalFileName}", MessageLevel.Error, Position: FormStartPosition.CenterScreen, AutoClose: true); + MessageX.Error($"为了您的使用体验,请不要更改程序文件名! 程序将在该消息框自动关闭后尝试自动恢复到原文件名,若自动恢复失败请手动改回。\n\n当前文件名: {CurrentExecutableName}\n原始文件名: {OriginalFileName}", Position: FormStartPosition.CenterScreen, AutoClose: true); ProcessHelper.RunProcess("cmd.exe", $"/c ren \"{CurrentExecutablePath}\" {OriginalFileName} & start \"\" \"{CurrentExecutableDir}{OriginalFileName}\" {AllArgs}"); Exit(ExitReason.InvalidExeName); } @@ -69,18 +69,18 @@ public static void StartProgram(string[] args) { case "/?": case "/h": - MessageX.Popup("可用的命令行参数: \n\n/h 显示此帮助信息;\n/ac 检测当前用户是否具有管理员权限;\n/fr <版本号>\n 强制下载并安装指定的版本,留空则当前版本,\n 推荐在特殊情况下使用,不支持老版本。", MessageLevel.Info); + MessageX.Info("可用的命令行参数: \n\n/h 显示此帮助信息;\n/ac 检测当前用户是否具有管理员权限;\n/fr <版本号>\n 强制下载并安装指定的版本,留空则当前版本,\n 推荐在特殊情况下使用,不支持老版本。"); break; case "/ac": CheckAdmin(out string UserName, true); - MessageX.Popup($"当前用户 {UserName} {(IsAdmin ? "" : "不")}具有管理员权限。", MessageLevel.Info); + MessageX.Info($"当前用户 {UserName} {(IsAdmin ? "" : "不")}具有管理员权限。"); break; case "/fr": if (Args.Length > 1) DownloaderForm.ManualVersion = Args[1]; Application.Run(new DownloaderForm()); break; default: - MessageX.Popup($"无法解析的命令行参数: \n{AllArgs}", MessageLevel.Error, AutoClose: true); + MessageX.Error($"无法解析的命令行参数: \n{AllArgs}", AutoClose: true); break; } } @@ -92,7 +92,7 @@ public static void StartProgram(string[] args) { if (Args.Length != 0) { - MessageX.Popup("请先关闭已打开的实例再使用命令行功能。", MessageLevel.Error, AutoClose: true); + MessageX.Error("请先关闭已打开的实例再使用命令行功能。", AutoClose: true); } StartPipeClient(); @@ -152,7 +152,7 @@ private static void HandleException(Exception ex) Clipboard.SetText(ExOutput); File.AppendAllText(ExFilePath, ExOutput); - var _DialogResult = MessageX.Popup($"程序出现意外错误,无法继续运行,非常抱歉给您带来不便,相关错误信息已写入到安装文件夹中的 {ExFileName} 文件和系统剪切板,建议您将相关信息并发送给软件开发者以便我们更好的定位并解决问题。或者您也可以点击 \"是\" 来重启应用程序,\"否\" 关闭应用程序{ex.ToMessage()}", MessageLevel.Error, FormManager.OpenForms.LastOrDefault(), Buttons: MessageBoxExButtons.YesNo); + var _DialogResult = MessageX.Error($"程序出现意外错误,无法继续运行,非常抱歉给您带来不便,相关错误信息已写入到安装文件夹中的 {ExFileName} 文件和系统剪切板,建议您将相关信息并发送给软件开发者以便我们更好的定位并解决问题。或者您也可以点击 \"是\" 来重启应用程序,\"否\" 关闭应用程序{ex.ToMessage()}", FormManager.OpenForms.LastOrDefault(), Buttons: MessageBoxExButtons.YesNo); OpenInstallDir(); Shutdown(Restart: _DialogResult == DialogResult.Yes); diff --git a/CEETimerCSharpWinForms/Modules/MessageX.cs b/CEETimerCSharpWinForms/Modules/MessageX.cs index 7934750..83002a7 100644 --- a/CEETimerCSharpWinForms/Modules/MessageX.cs +++ b/CEETimerCSharpWinForms/Modules/MessageX.cs @@ -20,19 +20,13 @@ static MessageX() ErrorIcon = GetIcon(93); } - /// - /// 在指定的窗体或定位到其标签页上或直接显示一个具有 DialogResult 返回值的消息框 - /// - /// 消息 - /// 消息等级 - /// [可选] 父窗体 - /// [可选] 父窗体的 TabControl - /// [可选] 父窗体的 TabControl 的标签页 - /// [可选] 要显示的按钮 - /// [可选] 消息框出现的位置 - /// [可选] 是否允许消息框在3s后自动关闭 - /// DialogResult - public static DialogResult Popup(string Message, MessageLevel Level, Form OwnerForm = null, TabControl ParentTabControl = null, TabPage ParentTabPage = null, MessageBoxExButtons Buttons = MessageBoxExButtons.OK, FormStartPosition Position = FormStartPosition.CenterParent, bool AutoClose = false) + public static DialogResult Info(string Message, Form OwnerForm = null, TabControl ParentTabControl = null, TabPage ParentTabPage = null, MessageBoxExButtons Buttons = MessageBoxExButtons.OK, FormStartPosition Position = FormStartPosition.CenterParent, bool AutoClose = false) => Popup(Message, MessageLevel.Info, OwnerForm, ParentTabControl, ParentTabPage, Buttons, Position, AutoClose); + + public static DialogResult Warn(string Message, Form OwnerForm = null, TabControl ParentTabControl = null, TabPage ParentTabPage = null, MessageBoxExButtons Buttons = MessageBoxExButtons.OK, FormStartPosition Position = FormStartPosition.CenterParent, bool AutoClose = false) => Popup(Message, MessageLevel.Warning, OwnerForm, ParentTabControl, ParentTabPage, Buttons, Position, AutoClose); + + public static DialogResult Error(string Message, Form OwnerForm = null, TabControl ParentTabControl = null, TabPage ParentTabPage = null, MessageBoxExButtons Buttons = MessageBoxExButtons.OK, FormStartPosition Position = FormStartPosition.CenterParent, bool AutoClose = false) => Popup(Message, MessageLevel.Error, OwnerForm, ParentTabControl, ParentTabPage, Buttons, Position, AutoClose); + + private static DialogResult Popup(string Message, MessageLevel Level, Form OwnerForm, TabControl ParentTabControl, TabPage ParentTabPage, MessageBoxExButtons Buttons, FormStartPosition Position, bool AutoClose) { var (Title, MessageBoxExIcon, Sound) = GetStuff(Level); using var _MessageBoxEx = new MessageBoxEx(Sound, Buttons, AutoClose); diff --git a/CEETimerCSharpWinForms/Modules/UpdateChecker.cs b/CEETimerCSharpWinForms/Modules/UpdateChecker.cs index 613ab51..d611bcd 100644 --- a/CEETimerCSharpWinForms/Modules/UpdateChecker.cs +++ b/CEETimerCSharpWinForms/Modules/UpdateChecker.cs @@ -39,7 +39,7 @@ public void CheckUpdate(bool IsProgramStart, Form OwnerForm) { OwnerForm.Invoke(() => { - if (MessageX.Popup($"检测到新版本,是否下载并安装?\n\n当前版本: v{AppLauncher.AppVersion}\n最新版本: v{CurrentLatest}\n发布日期: {PublishTime}\n\nv{CurrentLatest}更新日志: {UpdateLog}", MessageLevel.Info, OwnerForm, Buttons: MessageBoxExButtons.YesNo, Position: IsProgramStart ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent) == DialogResult.Yes) + if (MessageX.Info($"检测到新版本,是否下载并安装?\n\n当前版本: v{AppLauncher.AppVersion}\n最新版本: v{CurrentLatest}\n发布日期: {PublishTime}\n\nv{CurrentLatest}更新日志: {UpdateLog}", OwnerForm, Buttons: MessageBoxExButtons.YesNo, Position: IsProgramStart ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent) == DialogResult.Yes) { if (FormDownloader == null || FormDownloader.IsDisposed) { @@ -52,14 +52,14 @@ public void CheckUpdate(bool IsProgramStart, Form OwnerForm) } else if (!IsProgramStart) { - MessageX.Popup($"当前 v{AppLauncher.AppVersion} 已是最新版本。\n\n获取到的版本: v{CurrentLatest}\n发布日期: {PublishTime}\n\n当前版本更新日志: {UpdateLog}", MessageLevel.Info, OwnerForm); + MessageX.Info($"当前 v{AppLauncher.AppVersion} 已是最新版本。\n\n获取到的版本: v{CurrentLatest}\n发布日期: {PublishTime}\n\n当前版本更新日志: {UpdateLog}", OwnerForm); } } catch (Exception ex) { if (!IsProgramStart) { - MessageX.Popup($"检查更新时发生错误! {ex.ToMessage()}", MessageLevel.Error, OwnerForm); + MessageX.Error($"检查更新时发生错误! {ex.ToMessage()}", OwnerForm); } } }