Compare commits

...

5 Commits

Author SHA1 Message Date
zsyg
ac93c8418f Add files via upload 2025-06-30 20:25:25 +08:00
zsyg
5a49714ed7 Add files via upload 2025-06-30 20:22:07 +08:00
zsyg
19056a1a8c Add files via upload 2025-06-30 20:21:19 +08:00
zsyg
7c4250f912 Add files via upload 2025-06-30 20:20:48 +08:00
zsyg
d056c24a1b Add files via upload 2025-06-30 20:20:21 +08:00
7 changed files with 481 additions and 204 deletions

View File

@@ -1,141 +1,144 @@
using System; using System;
using System.Drawing; using System.Drawing;
using System.Windows.Forms; using System.Windows.Forms;
namespace AppStore namespace AppStore
{ {
public class AboutUserControl : UserControl public class AboutUserControl : UserControl
{ {
private PictureBox logo = null!; private PictureBox logo = null!;
private Label infoLabel = null!; private Label infoLabel = null!;
public AboutUserControl() public AboutUserControl()
{ {
InitializeComponent(); InitializeComponent();
} }
private void InitializeComponent() private void InitializeComponent()
{ {
this.Dock = DockStyle.Fill; this.Dock = DockStyle.Fill;
this.BackColor = Color.White; this.BackColor = ThemeManager.BackgroundColor;
this.Padding = new Padding(20); this.Padding = new Padding(20);
// 创建主布局面板 // 创建主布局面板
TableLayoutPanel mainLayout = new TableLayoutPanel(); TableLayoutPanel mainLayout = new TableLayoutPanel();
mainLayout.Dock = DockStyle.Fill; mainLayout.Dock = DockStyle.Fill;
mainLayout.ColumnCount = 1; mainLayout.BackColor = ThemeManager.BackgroundColor;
mainLayout.RowCount = 2; mainLayout.ColumnCount = 1;
mainLayout.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); mainLayout.RowCount = 2;
mainLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize)); mainLayout.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
mainLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize)); mainLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize));
mainLayout.Padding = new Padding(0, 20, 0, 20); mainLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize));
mainLayout.Padding = new Padding(0, 20, 0, 20);
// 初始化并添加应用图标
logo = new PictureBox(); // 初始化并添加应用图标
try logo = new PictureBox();
{ try
logo.Image = Image.FromFile("img/png/kortapp-z.png"); {
} logo.Image = Image.FromFile("img/png/kortapp-z.png");
catch (Exception ex) }
{ catch (Exception ex)
Logger.LogError($"无法加载应用图标: {ex.Message}"); {
logo.Image = SystemIcons.Application.ToBitmap(); Logger.LogError($"无法加载应用图标: {ex.Message}");
} logo.Image = SystemIcons.Application.ToBitmap();
logo.SizeMode = PictureBoxSizeMode.Zoom; }
logo.Width = 200; logo.SizeMode = PictureBoxSizeMode.Zoom;
logo.Height = 200; logo.Width = 200;
logo.Anchor = AnchorStyles.None; logo.Height = 200;
logo.Margin = new Padding(0, 0, 0, 20); logo.Anchor = AnchorStyles.None;
mainLayout.Controls.Add(logo, 0, 0); logo.Margin = new Padding(0, 0, 0, 20);
mainLayout.Controls.Add(logo, 0, 0);
// 初始化并添加应用信息
infoLabel = new Label(); // 初始化并添加应用信息
infoLabel.Text = "kortapp-z\n版本: 1.1.0\n作者: zs-yg\n一个简单、开源的应用商店\nkortapp-z是完全免费\n基于.NET8和C/C++的软件"; infoLabel = new Label();
infoLabel.Font = new Font("Microsoft YaHei", 12); infoLabel.Text = "kortapp-z\n版本: 1.1.1\n作者: zs-yg\n一个简单、开源的应用商店\nkortapp-z是完全免费\n基于.NET8和C/C++的软件";
infoLabel.AutoSize = false; infoLabel.Font = new Font("Microsoft YaHei", 12);
infoLabel.Width = 300; infoLabel.AutoSize = false;
infoLabel.Height = 130; // 增加高度确保文字完整显示 infoLabel.Width = 300;
infoLabel.TextAlign = ContentAlignment.MiddleCenter; infoLabel.Height = 130; // 增加高度确保文字完整显示
infoLabel.Anchor = AnchorStyles.None; infoLabel.TextAlign = ContentAlignment.MiddleCenter;
mainLayout.Controls.Add(infoLabel, 0, 1); infoLabel.Anchor = AnchorStyles.None;
mainLayout.Controls.Add(infoLabel, 0, 1);
// 调整主布局为3行
mainLayout.RowCount = 3; // 调整主布局为3行
mainLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize)); mainLayout.RowCount = 3;
mainLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize)); mainLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize));
mainLayout.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); mainLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize));
mainLayout.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
// 在底部添加GitHub链接区域
TableLayoutPanel githubPanel = new TableLayoutPanel(); // 在底部添加GitHub链接区域
githubPanel.Dock = DockStyle.Bottom; TableLayoutPanel githubPanel = new TableLayoutPanel();
githubPanel.Height = 60; githubPanel.Dock = DockStyle.Bottom;
githubPanel.ColumnCount = 3; githubPanel.BackColor = ThemeManager.BackgroundColor;
githubPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); githubPanel.Height = 60;
githubPanel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize)); githubPanel.ColumnCount = 3;
githubPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); githubPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
githubPanel.RowCount = 1; githubPanel.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
githubPanel.Padding = new Padding(10); githubPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
githubPanel.RowCount = 1;
// 添加GitHub图标 githubPanel.Padding = new Padding(10);
PictureBox githubIcon = new PictureBox();
try // 添加GitHub图标
{ PictureBox githubIcon = new PictureBox();
githubIcon.Image = Image.FromFile("img/jpg/github.jpg"); try
} {
catch (Exception ex) githubIcon.Image = Image.FromFile("img/jpg/github.jpg");
{ }
Logger.LogError($"无法加载GitHub图标: {ex.Message}"); catch (Exception ex)
githubIcon.Image = SystemIcons.Application.ToBitmap(); {
} Logger.LogError($"无法加载GitHub图标: {ex.Message}");
githubIcon.SizeMode = PictureBoxSizeMode.Zoom; githubIcon.Image = SystemIcons.Application.ToBitmap();
githubIcon.Width = 30; }
githubIcon.Height = 30; githubIcon.SizeMode = PictureBoxSizeMode.Zoom;
githubIcon.Cursor = Cursors.Hand; githubIcon.Width = 30;
githubIcon.Click += (s, e) => { githubIcon.Height = 30;
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo githubIcon.Cursor = Cursors.Hand;
{ githubIcon.Click += (s, e) => {
FileName = "https://github.com/zs-yg/kortapp-z", System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
UseShellExecute = true {
}); FileName = "https://github.com/zs-yg/kortapp-z",
}; UseShellExecute = true
});
// 添加文字说明 };
Label githubLabel = new Label();
githubLabel.Text = "🤗🤗🤗开源地址 🌟 欢迎点star和提交pr 🚀"; // 添加文字说明
githubLabel.Font = new Font("Microsoft YaHei", 10); Label githubLabel = new Label();
githubLabel.AutoSize = true; githubLabel.Text = "🤗🤗🤗开源地址 🌟 欢迎点star和提交pr 🚀";
githubLabel.Margin = new Padding(10, 0, 0, 0); githubLabel.Font = new Font("Microsoft YaHei", 10);
githubLabel.AutoSize = true;
// 创建包含图标和文字的面板 githubLabel.Margin = new Padding(10, 0, 0, 0);
Panel linkPanel = new Panel();
linkPanel.AutoSize = true; // 创建包含图标和文字的面板
linkPanel.Controls.Add(githubIcon); Panel linkPanel = new Panel();
linkPanel.Controls.Add(githubLabel); linkPanel.AutoSize = true;
githubIcon.Location = new Point(0, 0); linkPanel.BackColor = ThemeManager.BackgroundColor;
githubLabel.Location = new Point(githubIcon.Width + 10, 5); linkPanel.Controls.Add(githubIcon);
linkPanel.Controls.Add(githubLabel);
// 将链接面板添加到中间列 githubIcon.Location = new Point(0, 0);
githubPanel.Controls.Add(linkPanel, 1, 0); githubLabel.Location = new Point(githubIcon.Width + 10, 5);
this.Controls.Add(mainLayout); // 将链接面板添加到中间列
this.Controls.Add(githubPanel); githubPanel.Controls.Add(linkPanel, 1, 0);
}
} this.Controls.Add(mainLayout);
this.Controls.Add(githubPanel);
// 保留原AboutForm作为容器(可选) }
public class AboutForm : Form }
{
public AboutForm() // 保留原AboutForm作为容器(可选)
{ public class AboutForm : Form
this.Text = "关于 kortapp-z"; {
this.Size = new Size(500, 400); public AboutForm()
this.StartPosition = FormStartPosition.CenterScreen; {
this.FormBorderStyle = FormBorderStyle.FixedDialog; this.Text = "关于 kortapp-z";
this.MaximizeBox = false; this.Size = new Size(500, 400);
this.MinimizeBox = false; this.StartPosition = FormStartPosition.CenterScreen;
this.FormBorderStyle = FormBorderStyle.FixedDialog;
var aboutControl = new AboutUserControl(); this.MaximizeBox = false;
this.Controls.Add(aboutControl); this.MinimizeBox = false;
}
} var aboutControl = new AboutUserControl();
} this.Controls.Add(aboutControl);
}
}
}

View File

@@ -23,13 +23,40 @@ namespace AppStore
cancelBtn = new Button(); cancelBtn = new Button();
InitializeComponent(); InitializeComponent();
// 监听主题变化
ThemeManager.ThemeChanged += (theme) => {
this.Invoke((MethodInvoker)delegate {
ApplyTheme();
});
};
}
private void ApplyTheme()
{
this.BackColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light
? Color.White
: Color.Black;
this.ForeColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light
? Color.Black
: Color.White;
cancelBtn.BackColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light
? SystemColors.Control
: Color.FromArgb(70, 70, 70);
cancelBtn.ForeColor = ThemeManager.TextColor;
} }
private void InitializeComponent() private void InitializeComponent()
{ {
this.Size = new Size(400, 60); this.Size = new Size(400, 60);
this.BackColor = Color.White; this.BackColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light
? Color.White
: Color.Black;
this.BorderStyle = BorderStyle.FixedSingle; this.BorderStyle = BorderStyle.FixedSingle;
this.ForeColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light
? Color.Black
: Color.White;
// 文件名标签 // 文件名标签
nameLabel = new Label(); nameLabel = new Label();
@@ -56,6 +83,12 @@ namespace AppStore
cancelBtn.Text = "取消"; cancelBtn.Text = "取消";
cancelBtn.Size = new Size(60, 25); cancelBtn.Size = new Size(60, 25);
cancelBtn.Location = new Point(320, 30); cancelBtn.Location = new Point(320, 30);
cancelBtn.BackColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light
? SystemColors.Control
: Color.FromArgb(70, 70, 70);
cancelBtn.ForeColor = ThemeManager.TextColor;
cancelBtn.FlatStyle = FlatStyle.Flat;
cancelBtn.FlatAppearance.BorderSize = 0;
cancelBtn.Click += CancelBtn_Click; cancelBtn.Click += CancelBtn_Click;
this.Controls.Add(cancelBtn); this.Controls.Add(cancelBtn);
} }

View File

@@ -140,11 +140,19 @@ namespace AppStore
this.StartPosition = FormStartPosition.CenterScreen; this.StartPosition = FormStartPosition.CenterScreen;
this.Icon = new Icon("img/ico/icon.ico"); // 设置窗体图标 this.Icon = new Icon("img/ico/icon.ico"); // 设置窗体图标
// 注册主题变更事件
ThemeManager.ThemeChanged += (theme) =>
{
this.Invoke((MethodInvoker)delegate {
AnimateThemeChange();
});
};
// 现代化顶部导航栏 // 现代化顶部导航栏
Panel buttonPanel = new Panel(); Panel buttonPanel = new Panel();
buttonPanel.Dock = DockStyle.Top; buttonPanel.Dock = DockStyle.Top;
buttonPanel.Height = 70; buttonPanel.Height = 70;
buttonPanel.BackColor = Color.FromArgb(240, 240, 240); buttonPanel.BackColor = ThemeManager.ControlBackgroundColor;
buttonPanel.Padding = new Padding(10, 15, 10, 0); buttonPanel.Padding = new Padding(10, 15, 10, 0);
buttonPanel.AutoScroll = true; buttonPanel.AutoScroll = true;
buttonPanel.AutoSize = true; buttonPanel.AutoSize = true;
@@ -154,11 +162,13 @@ namespace AppStore
Action<Button> styleButton = (Button btn) => { Action<Button> styleButton = (Button btn) => {
btn.FlatStyle = FlatStyle.Flat; btn.FlatStyle = FlatStyle.Flat;
btn.FlatAppearance.BorderSize = 0; btn.FlatAppearance.BorderSize = 0;
btn.BackColor = Color.Transparent; btn.BackColor = ThemeManager.ControlBackgroundColor;
btn.ForeColor = Color.FromArgb(64, 64, 64); btn.ForeColor = ThemeManager.TextColor;
btn.Font = new Font("Microsoft YaHei", 10, FontStyle.Regular); btn.Font = new Font("Microsoft YaHei", 10, FontStyle.Regular);
btn.Size = new Size(120, 40); btn.Size = new Size(120, 40);
btn.Cursor = Cursors.Hand; btn.Cursor = Cursors.Hand;
btn.FlatAppearance.MouseOverBackColor = ThemeManager.ButtonHoverColor;
btn.FlatAppearance.MouseDownBackColor = ThemeManager.ButtonActiveColor;
// 悬停效果 // 悬停效果
btn.MouseEnter += (s, e) => { btn.MouseEnter += (s, e) => {
@@ -167,7 +177,7 @@ namespace AppStore
}; };
btn.MouseLeave += (s, e) => { btn.MouseLeave += (s, e) => {
btn.ForeColor = Color.FromArgb(64, 64, 64); btn.ForeColor = ThemeManager.TextColor;
btn.Font = new Font(btn.Font, FontStyle.Regular); btn.Font = new Font(btn.Font, FontStyle.Regular);
}; };
}; };
@@ -230,7 +240,7 @@ namespace AppStore
// 现代化内容区域 // 现代化内容区域
contentPanel = new Panel(); contentPanel = new Panel();
contentPanel.Dock = DockStyle.Fill; contentPanel.Dock = DockStyle.Fill;
contentPanel.BackColor = Color.White; contentPanel.BackColor = ThemeManager.BackgroundColor;
contentPanel.Padding = new Padding(20); contentPanel.Padding = new Padding(20);
this.Controls.Add(contentPanel); this.Controls.Add(contentPanel);
@@ -238,11 +248,13 @@ namespace AppStore
Panel separator = new Panel(); Panel separator = new Panel();
separator.Dock = DockStyle.Top; separator.Dock = DockStyle.Top;
separator.Height = 1; separator.Height = 1;
separator.BackColor = Color.FromArgb(230, 230, 230); separator.BackColor = ThemeManager.CurrentTheme == ThemeManager.ThemeMode.Light
? Color.FromArgb(230, 230, 230)
: Color.FromArgb(60, 60, 60);
contentPanel.Controls.Add(separator); contentPanel.Controls.Add(separator);
this.Controls.Add(buttonPanel); this.Controls.Add(buttonPanel);
this.BackColor = Color.White; this.BackColor = ThemeManager.BackgroundColor;
// 默认显示软件下载视图 // 默认显示软件下载视图
ShowAppsView(); ShowAppsView();
@@ -1271,6 +1283,9 @@ namespace AppStore
// 初始化窗体组件 // 初始化窗体组件
InitializeComponent(); InitializeComponent();
// 应用主题
ThemeManager.ApplyTheme(this);
// 订阅下载管理器事件 // 订阅下载管理器事件
DownloadManager.Instance.DownloadAdded += OnDownloadAdded; // 下载添加事件 DownloadManager.Instance.DownloadAdded += OnDownloadAdded; // 下载添加事件
DownloadManager.Instance.DownloadProgressChanged += OnDownloadProgressChanged; // 下载进度变化事件 DownloadManager.Instance.DownloadProgressChanged += OnDownloadProgressChanged; // 下载进度变化事件
@@ -1352,5 +1367,69 @@ namespace AppStore
Logger.Log($"下载完成: {item.FileName}, 状态: {item.Status}"); // 记录日志 Logger.Log($"下载完成: {item.FileName}, 状态: {item.Status}"); // 记录日志
item.UpdateDisplay(); // 更新UI显示 item.UpdateDisplay(); // 更新UI显示
} }
/// <summary>
/// 主题切换动画效果
/// </summary>
private void AnimateThemeChange()
{
const int animationSteps = 10;
const int animationInterval = 30;
var timer = new System.Windows.Forms.Timer { Interval = animationInterval };
int step = 0;
// 保存当前和目标颜色
var originalBackColor = this.BackColor;
var targetBackColor = ThemeManager.BackgroundColor;
var originalForeColor = this.ForeColor;
var targetForeColor = ThemeManager.TextColor;
timer.Tick += (s, e) => {
if (step >= animationSteps)
{
timer.Stop();
timer.Dispose();
// 确保最终颜色准确
ThemeManager.ApplyTheme(this);
return;
}
// 计算插值比例
float ratio = (float)step / animationSteps;
step++;
// 插值计算新颜色
var newBackColor = Color.FromArgb(
(int)(originalBackColor.R + (targetBackColor.R - originalBackColor.R) * ratio),
(int)(originalBackColor.G + (targetBackColor.G - originalBackColor.G) * ratio),
(int)(originalBackColor.B + (targetBackColor.B - originalBackColor.B) * ratio));
var newForeColor = Color.FromArgb(
(int)(originalForeColor.R + (targetForeColor.R - originalForeColor.R) * ratio),
(int)(originalForeColor.G + (targetForeColor.G - originalForeColor.G) * ratio),
(int)(originalForeColor.B + (targetForeColor.B - originalForeColor.B) * ratio));
// 应用新颜色
this.Invoke((MethodInvoker)delegate {
this.BackColor = newBackColor;
this.ForeColor = newForeColor;
foreach (Control control in this.Controls)
{
control.BackColor = newBackColor;
control.ForeColor = newForeColor;
// 特殊处理按钮的悬停状态
if (control is Button button)
{
button.FlatAppearance.MouseOverBackColor = ThemeManager.ButtonHoverColor;
button.FlatAppearance.MouseDownBackColor = ThemeManager.ButtonActiveColor;
}
}
});
};
timer.Start();
}
} }
} }

View File

@@ -1,53 +1,88 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Windows.Forms; using System.Windows.Forms;
using System.Drawing;
namespace AppStore
{ namespace AppStore
public class SettingsUserControl : UserControl {
{ public class SettingsUserControl : UserControl
private Button btnCleanLogs; {
private Button btnCleanLogs;
public SettingsUserControl() private Button btnLightTheme;
{ private Button btnDarkTheme;
this.Dock = DockStyle.Fill;
this.BackColor = Color.White; public SettingsUserControl()
{
// 设置顶部内边距 this.Dock = DockStyle.Fill;
this.Padding = new Padding(0, 30, 0, 0); ThemeManager.ApplyTheme(this);
btnCleanLogs = new Button(); // 设置顶部内边距
btnCleanLogs.Text = "清理日志"; this.Padding = new Padding(0, 30, 0, 0);
btnCleanLogs.Size = new Size(150, 40);
btnCleanLogs.Location = new Point((this.Width - 150) / 2, 50); // 调整Y坐标为50靠近顶部 // 主题切换按钮
btnCleanLogs.Font = new Font("Microsoft YaHei", 10); btnLightTheme = new Button();
btnCleanLogs.Anchor = AnchorStyles.Top; // 添加顶部锚点 btnLightTheme.Text = "浅色模式";
btnCleanLogs.Click += (s, e) => CleanLogs(); btnLightTheme.Size = new Size(150, 40);
this.Controls.Add(btnCleanLogs); btnLightTheme.Location = new Point((this.Width - 320) / 2, 50);
} btnLightTheme.Font = new Font("Microsoft YaHei", 10);
btnLightTheme.Anchor = AnchorStyles.Top;
private void CleanLogs() btnLightTheme.Click += (s, e) => SwitchTheme(ThemeManager.ThemeMode.Light);
{ this.Controls.Add(btnLightTheme);
try
{ btnDarkTheme = new Button();
string logCleanerPath = Path.Combine("resource", "log_cleaner.exe"); btnDarkTheme.Text = "深色模式";
btnDarkTheme.Size = new Size(150, 40);
if (File.Exists(logCleanerPath)) btnDarkTheme.Location = new Point(btnLightTheme.Right + 20, 50);
{ btnDarkTheme.Font = new Font("Microsoft YaHei", 10);
Process.Start(logCleanerPath); btnDarkTheme.Anchor = AnchorStyles.Top;
MessageBox.Show("日志清理程序已启动", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); btnDarkTheme.Click += (s, e) => SwitchTheme(ThemeManager.ThemeMode.Dark);
} this.Controls.Add(btnDarkTheme);
else
{ // 清理日志按钮
MessageBox.Show("日志清理程序未找到", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); btnCleanLogs = new Button();
} btnCleanLogs.Text = "清理日志";
} btnCleanLogs.Size = new Size(150, 40);
catch (Exception ex) btnCleanLogs.Location = new Point((this.Width - 150) / 2, 110);
{ btnCleanLogs.Font = new Font("Microsoft YaHei", 10);
Logger.LogError("清理日志时出错", ex); btnCleanLogs.Anchor = AnchorStyles.Top;
MessageBox.Show($"清理日志时出错: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); btnCleanLogs.Click += (s, e) => CleanLogs();
} this.Controls.Add(btnCleanLogs);
}
} ThemeManager.ThemeChanged += OnThemeChanged;
} }
private void SwitchTheme(ThemeManager.ThemeMode theme)
{
ThemeManager.CurrentTheme = theme;
}
private void OnThemeChanged(ThemeManager.ThemeMode theme)
{
ThemeManager.ApplyTheme(this);
}
private void CleanLogs()
{
try
{
string logCleanerPath = Path.Combine("resource", "log_cleaner.exe");
if (File.Exists(logCleanerPath))
{
Process.Start(logCleanerPath);
MessageBox.Show("日志清理程序已启动", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("日志清理程序未找到", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception ex)
{
Logger.LogError("清理日志时出错", ex);
MessageBox.Show($"清理日志时出错: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

127
ThemeManager.cs Normal file
View File

@@ -0,0 +1,127 @@
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Text.Json;
using System.IO;
namespace AppStore
{
public static class ThemeManager
{
public enum ThemeMode
{
Light,
Dark
}
private static readonly string ThemeConfigPath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"zsyg", "kortapp-z", ".date", "theme.json");
private static ThemeMode _currentTheme = LoadTheme();
private static ThemeMode LoadTheme()
{
try
{
if (File.Exists(ThemeConfigPath))
{
var json = File.ReadAllText(ThemeConfigPath);
return JsonSerializer.Deserialize<ThemeMode>(json);
}
}
catch
{
// 忽略错误,使用默认主题
}
return ThemeMode.Light;
}
private static void SaveTheme(ThemeMode theme)
{
try
{
var dir = Path.GetDirectoryName(ThemeConfigPath);
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
var json = JsonSerializer.Serialize(theme);
File.WriteAllText(ThemeConfigPath, json);
}
catch
{
// 忽略错误
}
}
// 浅色主题颜色
private static readonly Color LightBackground = Color.FromArgb(255, 255, 255);
private static readonly Color LightControlBackground = Color.FromArgb(240, 240, 240);
private static readonly Color LightText = Color.FromArgb(30, 30, 30);
private static readonly Color LightButtonHover = Color.FromArgb(230, 230, 230);
private static readonly Color LightButtonActive = Color.FromArgb(220, 220, 220);
// 深色主题颜色
private static readonly Color DarkBackground = Color.FromArgb(30, 30, 30);
private static readonly Color DarkControlBackground = Color.FromArgb(45, 45, 45);
private static readonly Color DarkText = Color.FromArgb(240, 240, 240);
private static readonly Color DarkButtonHover = Color.FromArgb(60, 60, 60);
private static readonly Color DarkButtonActive = Color.FromArgb(70, 70, 70);
public static event Action<ThemeMode> ThemeChanged = delegate {};
public static ThemeMode CurrentTheme
{
get => _currentTheme;
set
{
if (_currentTheme != value)
{
_currentTheme = value;
ThemeChanged?.Invoke(value);
SaveTheme(value);
}
}
}
public static Color BackgroundColor =>
_currentTheme == ThemeMode.Light ? LightBackground : DarkBackground;
public static Color ControlBackgroundColor =>
_currentTheme == ThemeMode.Light ? LightControlBackground : DarkControlBackground;
public static Color TextColor =>
_currentTheme == ThemeMode.Light ? LightText : DarkText;
public static Color ButtonHoverColor =>
_currentTheme == ThemeMode.Light ? LightButtonHover : DarkButtonHover;
public static Color ButtonActiveColor =>
_currentTheme == ThemeMode.Light ? LightButtonActive : DarkButtonActive;
public static void ApplyTheme(Control control)
{
ApplyThemeToControl(control);
}
private static void ApplyThemeToControl(Control control)
{
control.BackColor = BackgroundColor;
control.ForeColor = TextColor;
if (control is Button button)
{
button.FlatStyle = FlatStyle.Flat;
button.FlatAppearance.BorderSize = 0;
button.FlatAppearance.MouseOverBackColor = ButtonHoverColor;
button.FlatAppearance.MouseDownBackColor = ButtonActiveColor;
}
foreach (Control childControl in control.Controls)
{
ApplyThemeToControl(childControl);
}
}
}
}

View File

@@ -2,7 +2,7 @@
; 有关创建 Inno Setup 脚本文件的详细信息,请参阅帮助文档! ; 有关创建 Inno Setup 脚本文件的详细信息,请参阅帮助文档!
#define MyAppName "kortapp-z" #define MyAppName "kortapp-z"
#define MyAppVersion "1.1.0" #define MyAppVersion "1.1.1"
#define MyAppPublisher "zsyg" #define MyAppPublisher "zsyg"
#define MyAppURL "https://github.com/zs-yg/kortapp-z" #define MyAppURL "https://github.com/zs-yg/kortapp-z"
#define MyAppExeName "kortapp.exe" #define MyAppExeName "kortapp.exe"

View File

@@ -2,7 +2,7 @@
; 有关创建 Inno Setup 脚本文件的详细信息,请参阅帮助文档! ; 有关创建 Inno Setup 脚本文件的详细信息,请参阅帮助文档!
#define MyAppName "kortapp-z" #define MyAppName "kortapp-z"
#define MyAppVersion "1.1.0" #define MyAppVersion "1.1.1"
#define MyAppPublisher "zsyg" #define MyAppPublisher "zsyg"
#define MyAppURL "https://github.com/zs-yg/kortapp-z" #define MyAppURL "https://github.com/zs-yg/kortapp-z"
#define MyAppExeName "kortapp.exe" #define MyAppExeName "kortapp.exe"