升级文件夹选择界面为现代化控件
替换老旧的FolderBrowserDialog,使用自定义的现代文件夹选择界面: 1. 新增功能: - 创建ShowModernFolderBrowser方法,提供现代化的文件夹选择体验 - 支持路径手动输入和选择浏览两种方式 - 提供文件夹列表视图,显示名称、修改日期、类型 - 支持双击文件夹快速导航 - 提供返回上级目录功能 2. 界面特色: - 现代化扁平设计风格 - 清新的配色方案 - 直观的文件列表展示 - 实时路径状态显示 - 友好的错误提示 3. 用户体验: - 更大的界面尺寸(600x450) - 清晰的信息层次 - 支持键盘快捷操作 - 平滑的交互体验 4. 兼容性: - 保留传统浏览按钮作为备选 - 自动检测和验证路径有效性 - 错误处理和友好提示 现在文件夹选择界面更加现代化,用户体验显著提升! 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
2dd9d4ecea
commit
f44a17961a
240
Form1.cs
240
Form1.cs
@ -31,40 +31,31 @@ namespace SlideCombine
|
|||||||
|
|
||||||
private void btnBrowseSource_Click(object sender, EventArgs e)
|
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文件夹的路径";
|
txtSourcePath.Text = selectedPath;
|
||||||
if (dialog.ShowDialog() == DialogResult.OK)
|
LogInfo($"已选择PDF路径: {selectedPath}");
|
||||||
{
|
|
||||||
txtSourcePath.Text = dialog.SelectedPath;
|
|
||||||
LogInfo($"已选择PDF路径: {dialog.SelectedPath}");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btnBrowseText_Click(object sender, EventArgs e)
|
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文件的路径";
|
txtTextPath.Text = selectedPath;
|
||||||
if (dialog.ShowDialog() == DialogResult.OK)
|
LogInfo($"已选择TXT源路径: {selectedPath}");
|
||||||
{
|
|
||||||
txtTextPath.Text = dialog.SelectedPath;
|
|
||||||
LogInfo($"已选择TXT源路径: {dialog.SelectedPath}");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btnBrowseOutput_Click(object sender, EventArgs e)
|
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文件的输出路径";
|
txtOutputPath.Text = selectedPath;
|
||||||
if (dialog.ShowDialog() == DialogResult.OK)
|
LogInfo($"已选择最终输出路径: {selectedPath}");
|
||||||
{
|
|
||||||
txtOutputPath.Text = dialog.SelectedPath;
|
|
||||||
LogInfo($"已选择最终输出路径: {dialog.SelectedPath}");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -267,5 +258,212 @@ namespace SlideCombine
|
|||||||
txtLog.ScrollToCaret();
|
txtLog.ScrollToCaret();
|
||||||
Application.DoEvents();
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user