diff --git a/Form1.cs b/Form1.cs index a68389b..4784ba6 100644 --- a/Form1.cs +++ b/Form1.cs @@ -31,40 +31,31 @@ namespace SlideCombine private void btnBrowseSource_Click(object sender, EventArgs e) { - using (FolderBrowserDialog dialog = new FolderBrowserDialog()) + string selectedPath = ShowModernFolderBrowser("请选择包含PDF文件夹的路径(含FreePic2Pdf_bkmk.txt文件)", txtSourcePath.Text); + if (!string.IsNullOrEmpty(selectedPath)) { - dialog.Description = "请选择包含PDF文件夹的路径"; - if (dialog.ShowDialog() == DialogResult.OK) - { - txtSourcePath.Text = dialog.SelectedPath; - LogInfo($"已选择PDF路径: {dialog.SelectedPath}"); - } + txtSourcePath.Text = selectedPath; + LogInfo($"已选择PDF路径: {selectedPath}"); } } private void btnBrowseText_Click(object sender, EventArgs e) { - using (FolderBrowserDialog dialog = new FolderBrowserDialog()) + string selectedPath = ShowModernFolderBrowser("请选择包含元数据TXT文件的路径", txtTextPath.Text); + if (!string.IsNullOrEmpty(selectedPath)) { - dialog.Description = "请选择包含元数据TXT文件的路径"; - if (dialog.ShowDialog() == DialogResult.OK) - { - txtTextPath.Text = dialog.SelectedPath; - LogInfo($"已选择TXT源路径: {dialog.SelectedPath}"); - } + txtTextPath.Text = selectedPath; + LogInfo($"已选择TXT源路径: {selectedPath}"); } } private void btnBrowseOutput_Click(object sender, EventArgs e) { - using (FolderBrowserDialog dialog = new FolderBrowserDialog()) + string selectedPath = ShowModernFolderBrowser("请选择合并后TXT文件的输出路径", txtOutputPath.Text); + if (!string.IsNullOrEmpty(selectedPath)) { - dialog.Description = "请选择合并后TXT文件的输出路径"; - if (dialog.ShowDialog() == DialogResult.OK) - { - txtOutputPath.Text = dialog.SelectedPath; - LogInfo($"已选择最终输出路径: {dialog.SelectedPath}"); - } + txtOutputPath.Text = selectedPath; + LogInfo($"已选择最终输出路径: {selectedPath}"); } } @@ -267,5 +258,212 @@ namespace SlideCombine txtLog.ScrollToCaret(); Application.DoEvents(); } + + private string ShowModernFolderBrowser(string title, string initialPath) + { + using (var form = new Form()) + { + form.Text = title; + form.Size = new Size(600, 450); + form.StartPosition = FormStartPosition.CenterParent; + form.FormBorderStyle = FormBorderStyle.FixedDialog; + form.MaximizeBox = false; + form.MinimizeBox = false; + form.BackColor = Color.White; + + // 标题标签 + var titleLabel = new Label(); + titleLabel.Text = title; + titleLabel.Location = new Point(20, 20); + titleLabel.Size = new Size(540, 30); + titleLabel.Font = new Font("Microsoft YaHei", 11F, FontStyle.Bold); + titleLabel.ForeColor = Color.FromArgb(51, 51, 51); + form.Controls.Add(titleLabel); + + // 路径输入框 + var pathTextBox = new TextBox(); + pathTextBox.Location = new Point(20, 60); + pathTextBox.Size = new Size(460, 30); + pathTextBox.Font = new Font("Microsoft YaHei", 10F); + pathTextBox.Text = initialPath ?? string.Empty; + pathTextBox.BorderStyle = BorderStyle.FixedSingle; + form.Controls.Add(pathTextBox); + + // 浏览按钮 + var browseButton = new Button(); + browseButton.Text = "浏览"; + browseButton.Location = new Point(490, 60); + browseButton.Size = new Size(70, 30); + browseButton.Font = new Font("Microsoft YaHei", 9F); + browseButton.BackColor = Color.FromArgb(66, 139, 202); + browseButton.ForeColor = Color.White; + browseButton.FlatStyle = FlatStyle.Flat; + browseButton.FlatAppearance.BorderSize = 0; + form.Controls.Add(browseButton); + + // 文件列表 + var fileList = new ListView(); + fileList.Location = new Point(20, 100); + fileList.Size = new Size(540, 250); + fileList.View = View.Details; + fileList.FullRowSelect = true; + fileList.GridLines = true; + fileList.Font = new Font("Microsoft YaHei", 9F); + fileList.BorderStyle = BorderStyle.FixedSingle; + fileList.Columns.Add("名称", 300); + fileList.Columns.Add("修改日期", 140); + fileList.Columns.Add("类型", 80); + form.Controls.Add(fileList); + + // 状态标签 + var statusLabel = new Label(); + statusLabel.Text = "当前路径: "; + statusLabel.Location = new Point(20, 360); + statusLabel.Size = new Size(540, 20); + statusLabel.Font = new Font("Microsoft YaHei", 9F); + statusLabel.ForeColor = Color.FromArgb(102, 102, 102); + form.Controls.Add(statusLabel); + + // 确定按钮 + var okButton = new Button(); + okButton.Text = "确定"; + okButton.Location = new Point(380, 380); + okButton.Size = new Size(80, 35); + okButton.Font = new Font("Microsoft YaHei", 10F, FontStyle.Bold); + okButton.BackColor = Color.FromArgb(92, 184, 92); + okButton.ForeColor = Color.White; + okButton.FlatStyle = FlatStyle.Flat; + okButton.FlatAppearance.BorderSize = 0; + form.AcceptButton = okButton; + form.Controls.Add(okButton); + + // 取消按钮 + var cancelButton = new Button(); + cancelButton.Text = "取消"; + cancelButton.Location = new Point(480, 380); + cancelButton.Size = new Size(80, 35); + cancelButton.Font = new Font("Microsoft YaHei", 10F); + cancelButton.BackColor = Color.FromArgb(217, 83, 79); + cancelButton.ForeColor = Color.White; + cancelButton.FlatStyle = FlatStyle.Flat; + cancelButton.FlatAppearance.BorderSize = 0; + cancelButton.CancelButton = cancelButton; + form.Controls.Add(cancelButton); + + // 当前路径 + string currentPath = string.IsNullOrEmpty(initialPath) ? + Environment.GetFolderPath(Environment.SpecialFolder.Desktop) : initialPath; + + // 加载文件夹内容的方法 + void LoadFolderContent(string path) + { + try + { + fileList.Items.Clear(); + statusLabel.Text = $"当前路径: {path}"; + + if (!string.IsNullOrEmpty(path) && Directory.Exists(path)) + { + // 添加返回上级目录 + if (Path.GetDirectoryName(path) != null) + { + var parentItem = new ListViewItem(new[] { "..", "上级目录", "文件夹" }); + parentItem.Tag = Path.GetDirectoryName(path); + parentItem.ForeColor = Color.FromArgb(66, 139, 202); + fileList.Items.Add(parentItem); + } + + // 添加子文件夹 + foreach (var dir in Directory.GetDirectories(path)) + { + var dirInfo = new DirectoryInfo(dir); + var item = new ListViewItem(new[] + { + dirInfo.Name, + dirInfo.LastWriteTime.ToString("yyyy-MM-dd HH:mm"), + "文件夹" + }); + item.Tag = dirInfo.FullName; + item.ForeColor = Color.FromArgb(51, 51, 51); + fileList.Items.Add(item); + } + } + } + catch (Exception ex) + { + MessageBox.Show($"无法访问该路径: {ex.Message}", "错误", + MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + + // 浏览按钮点击事件 + browseButton.Click += (s, e) => + { + using (var dialog = new FolderBrowserDialog()) + { + dialog.Description = title; + if (!string.IsNullOrEmpty(currentPath)) + { + dialog.SelectedPath = currentPath; + } + + if (dialog.ShowDialog() == DialogResult.OK) + { + currentPath = dialog.SelectedPath; + pathTextBox.Text = currentPath; + LoadFolderContent(currentPath); + } + } + }; + + // 文件列表双击事件 + fileList.DoubleClick += (s, e) => + { + if (fileList.SelectedItems.Count > 0) + { + var selectedItem = fileList.SelectedItems[0]; + if (selectedItem.Tag is string selectedPath && Directory.Exists(selectedPath)) + { + currentPath = selectedPath; + pathTextBox.Text = currentPath; + LoadFolderContent(currentPath); + } + } + }; + + // 确定按钮点击事件 + okButton.Click += (s, e) => + { + if (Directory.Exists(pathTextBox.Text)) + { + form.DialogResult = DialogResult.OK; + form.Close(); + } + else + { + MessageBox.Show("请输入有效的文件夹路径", "提示", + MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + }; + + // 取消按钮点击事件 + cancelButton.Click += (s, e) => + { + form.DialogResult = DialogResult.Cancel; + form.Close(); + }; + + // 初始加载 + LoadFolderContent(currentPath); + + // 显示对话框 + if (form.ShowDialog() == DialogResult.OK) + { + return pathTextBox.Text; + } + } + + return null; + } } }