From 3f38a8c323943deb2e594810db1618a0c35c88a2 Mon Sep 17 00:00:00 2001 From: yuuko <2576724631@qq.com> Date: Mon, 24 Nov 2025 10:59:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A1=B9=E7=9B=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Form1.Designer.cs | 174 ++++++++++++++++++++++++++++++++++++++++++++ Form1.cs | 81 +++++++++++++++++++++ Form1.resx | 120 ++++++++++++++++++++++++++++++ Program.cs | 60 +++++++++++++++ SlideCombine.csproj | 44 +++++++++++ SlideCombine.slnx | 3 + app.ico | Bin 0 -> 892 bytes 7 files changed, 482 insertions(+) create mode 100644 Form1.Designer.cs create mode 100644 Form1.cs create mode 100644 Form1.resx create mode 100644 Program.cs create mode 100644 SlideCombine.csproj create mode 100644 SlideCombine.slnx create mode 100644 app.ico diff --git a/Form1.Designer.cs b/Form1.Designer.cs new file mode 100644 index 0000000..6be42b3 --- /dev/null +++ b/Form1.Designer.cs @@ -0,0 +1,174 @@ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace SlideCombine +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + + // 主窗体设置 + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(600, 400); + Text = "WinForms应用模板"; + StartPosition = FormStartPosition.CenterScreen; + + // 创建控件 + grpSourceFolder = new GroupBox(); + lblSourcePath = new Label(); + txtSourcePath = new TextBox(); + btnBrowseSource = new Button(); + + grpOutputFolder = new GroupBox(); + lblOutputPath = new Label(); + txtOutputPath = new TextBox(); + btnBrowseOutput = new Button(); + + pnlButtons = new Panel(); + btnMerge = new Button(); + btnClear = new Button(); + btnExit = new Button(); + + grpProgress = new GroupBox(); + progressBar = new ProgressBar(); + txtLog = new TextBox(); + + // 设置源文件夹组 + grpSourceFolder.Text = "输入文件夹"; + grpSourceFolder.Location = new Point(10, 10); + grpSourceFolder.Size = new Size(580, 60); + grpSourceFolder.TabStop = false; + + lblSourcePath.Text = "路径:"; + lblSourcePath.Location = new Point(10, 25); + lblSourcePath.Size = new Size(30, 23); + + txtSourcePath.Location = new Point(45, 22); + txtSourcePath.Size = new Size(470, 23); + + btnBrowseSource.Text = "浏览"; + btnBrowseSource.Location = new Point(520, 20); + btnBrowseSource.Size = new Size(50, 25); + btnBrowseSource.Click += new EventHandler(btnBrowseSource_Click); + + grpSourceFolder.Controls.Add(lblSourcePath); + grpSourceFolder.Controls.Add(txtSourcePath); + grpSourceFolder.Controls.Add(btnBrowseSource); + + // 设置输出文件夹组 + grpOutputFolder.Text = "输出文件夹"; + grpOutputFolder.Location = new Point(10, 80); + grpOutputFolder.Size = new Size(580, 60); + grpOutputFolder.TabStop = false; + + lblOutputPath.Text = "路径:"; + lblOutputPath.Location = new Point(10, 25); + lblOutputPath.Size = new Size(30, 23); + + txtOutputPath.Location = new Point(45, 22); + txtOutputPath.Size = new Size(470, 23); + + btnBrowseOutput.Text = "浏览"; + btnBrowseOutput.Location = new Point(520, 20); + btnBrowseOutput.Size = new Size(50, 25); + btnBrowseOutput.Click += new EventHandler(btnBrowseOutput_Click); + + grpOutputFolder.Controls.Add(lblOutputPath); + grpOutputFolder.Controls.Add(txtOutputPath); + grpOutputFolder.Controls.Add(btnBrowseOutput); + + // 设置按钮面板 + pnlButtons.Location = new Point(10, 150); + pnlButtons.Size = new Size(580, 40); + + btnMerge.Text = "执行"; + btnMerge.Location = new Point(10, 8); + btnMerge.Size = new Size(75, 25); + btnMerge.Click += new EventHandler(btnMerge_Click); + + btnClear.Text = "清空"; + btnClear.Location = new Point(100, 8); + btnClear.Size = new Size(75, 25); + btnClear.Click += new EventHandler(btnClear_Click); + + btnExit.Text = "退出"; + btnExit.Location = new Point(190, 8); + btnExit.Size = new Size(75, 25); + btnExit.Click += new EventHandler(btnExit_Click); + + pnlButtons.Controls.Add(btnMerge); + pnlButtons.Controls.Add(btnClear); + pnlButtons.Controls.Add(btnExit); + + // 设置进度组 + grpProgress.Text = "进度"; + grpProgress.Location = new Point(10, 200); + grpProgress.Size = new Size(580, 180); + grpProgress.TabStop = false; + + progressBar.Location = new Point(10, 25); + progressBar.Size = new Size(560, 23); + progressBar.Style = ProgressBarStyle.Continuous; + + txtLog.Location = new Point(10, 55); + txtLog.Size = new Size(560, 115); + txtLog.Multiline = true; + txtLog.ScrollBars = ScrollBars.Vertical; + txtLog.ReadOnly = true; + + grpProgress.Controls.Add(progressBar); + grpProgress.Controls.Add(txtLog); + + // 添加所有控件到窗体 + Controls.Add(grpSourceFolder); + Controls.Add(grpOutputFolder); + Controls.Add(pnlButtons); + Controls.Add(grpProgress); + } + + #endregion + + private GroupBox grpSourceFolder; + private Label lblSourcePath; + private TextBox txtSourcePath; + private Button btnBrowseSource; + private GroupBox grpOutputFolder; + private Label lblOutputPath; + private TextBox txtOutputPath; + private Button btnBrowseOutput; + private Panel pnlButtons; + private Button btnMerge; + private Button btnClear; + private Button btnExit; + private GroupBox grpProgress; + private ProgressBar progressBar; + private TextBox txtLog; + } +} diff --git a/Form1.cs b/Form1.cs new file mode 100644 index 0000000..dc6a8ba --- /dev/null +++ b/Form1.cs @@ -0,0 +1,81 @@ +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace SlideCombine +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + + // 设置窗体图标 - 使用嵌入资源 + try + { + var stream = GetType().Assembly.GetManifestResourceStream("SlideCombine.app.ico"); + if (stream != null) + { + this.Icon = new Icon(stream); + } + } + catch + { + // 如果图标加载失败,使用默认图标 + // this.Icon = SystemIcons.Application; + } + } + + private void btnBrowseSource_Click(object sender, EventArgs e) + { + using (FolderBrowserDialog dialog = new FolderBrowserDialog()) + { + dialog.Description = "选择文件夹"; + if (dialog.ShowDialog() == DialogResult.OK) + { + txtSourcePath.Text = dialog.SelectedPath; + Log($"选择的文件夹: {dialog.SelectedPath}"); + } + } + } + + private void btnBrowseOutput_Click(object sender, EventArgs e) + { + using (FolderBrowserDialog dialog = new FolderBrowserDialog()) + { + dialog.Description = "选择输出文件夹"; + if (dialog.ShowDialog() == DialogResult.OK) + { + txtOutputPath.Text = dialog.SelectedPath; + Log($"输出文件夹: {dialog.SelectedPath}"); + } + } + } + + private void btnClear_Click(object sender, EventArgs e) + { + txtSourcePath.Clear(); + txtOutputPath.Clear(); + txtLog.Clear(); + progressBar.Value = 0; + } + + private void btnExit_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private void btnMerge_Click(object sender, EventArgs e) + { + MessageBox.Show("HelloWorld", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + Log("HelloWorld"); + } + + private void Log(string msg) + { + txtLog.AppendText($"{msg}\r\n"); + txtLog.ScrollToCaret(); + Application.DoEvents(); + } + } +} diff --git a/Form1.resx b/Form1.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..915ed6c --- /dev/null +++ b/Program.cs @@ -0,0 +1,60 @@ +using System; +using System.Windows.Forms; +using Microsoft.Win32; + +namespace SlideCombine +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + // 检查.NET Framework 4.8是否已安装 + if (!CheckDotNetFramework48()) + { + MessageBox.Show( + "检测到您的系统未安装 .NET Framework 4.8\n\n" + + "Excel合并工具需要此环境才能运行。\n\n" + + "请前往以下链接下载并安装:\n" + + "https://dotnet.microsoft.com/download/dotnet-framework/net48\n\n" + + "安装完成后请重新运行本程序。", + "缺少运行环境", + MessageBoxButtons.OK, + MessageBoxIcon.Error + ); + return; + } + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + + private static bool CheckDotNetFramework48() + { + try + { + using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\")) + { + if (key != null) + { + object release = key.GetValue("Release"); + if (release != null && int.TryParse(release.ToString(), out int releaseValue)) + { + // .NET Framework 4.8 的 Release 值为 528040 或更高 + return releaseValue >= 528040; + } + } + } + } + catch + { + // 如果无法访问注册表,假设未安装 + } + return false; + } + } +} \ No newline at end of file diff --git a/SlideCombine.csproj b/SlideCombine.csproj new file mode 100644 index 0000000..a9716a1 --- /dev/null +++ b/SlideCombine.csproj @@ -0,0 +1,44 @@ + + + + WinExe + net48 + true + SlideCombine + SlideCombine + app.ico + + + + + + + + + + false + false + true + + true + + + + + + + \ No newline at end of file diff --git a/SlideCombine.slnx b/SlideCombine.slnx new file mode 100644 index 0000000..09655da --- /dev/null +++ b/SlideCombine.slnx @@ -0,0 +1,3 @@ + + + diff --git a/app.ico b/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..b95e081a93bfe4abaeb53242d0ff73aec23db044 GIT binary patch literal 892 zcmZQzU<5)32L>Riz>vnwz#zuJz|a}s=g!L|#RX*YdV0770coHL1_ur{Ah{~D@E(xj zEbxddW?X?_wfUqO7?>qIT^vIy=DeMK)?YYKjEh&vF2?Dnk8LFwV z2{*R&a(3#N?r1!7ZtXwSQ^$_nWeMZmVX|p*|A8i!yE_^_2?lSS(zb=Sv9Rf~q`8~; zz3@lLue|4ck3M&DZ*kSE>$A;2b9tx;b-D;eiQIF#JZA>0!GVn5M>Z{cURizl`)nE3 zKjA!;XE&wEef-k;ag7+y?d{lWIS#dl+bm0=Gz`xLRp=ccdQd^7LI zp4S!OaxXbwd(BUvA%DiRl(vPI(@ZxXTV<2WbFQgUYD(=MjoEWwCuKf<%s+SH#6+Vj zt*xo*v*)hf{yKTV9i|N@1U@sY+oa`;;vK))Osonw#Dlg*@ovkV-0vEDeJxYng?O*K z|Ah+Vr#?MuqCTIw;?#urh-+Uq*S}Q%;_Uzq1#p0K;OXk; Jvd$@?2>?Jvj=ul^ literal 0 HcmV?d00001