简介

KryptonSaveFileDialog 是增强型保存文件对话框,替代标准 System.Windows.Forms.SaveFileDialog。它自动跟随 Krypton 主题渲染,提供文件保存路径选择、过滤器、覆盖确认等功能。当目标文件已存在时会自动弹出覆盖确认提示,用户选择的路径通过 FileName 属性获取。

KryptonSaveFileDialog 示例截图
KryptonSaveFileDialog 保存文件对话框

常用属性

属性类型说明
FileNamestring用户指定的保存文件完整路径
DefaultExtstring默认扩展名(用户未输入扩展名时自动追加)
AddExtensionbool是否自动为文件名追加扩展名
Filterstring文件类型过滤器
FilterIndexint默认选中的过滤器索引(从 1 开始)
InitialDirectorystring对话框打开时的初始目录
Titlestring对话框标题栏文字
OverwritePromptbool文件已存在时是否提示覆盖确认(默认 true)
CreatePromptbool文件不存在时是否提示创建确认
CheckPathExistsbool是否检查路径必须存在
RestoreDirectorybool关闭时是否恢复应用程序的当前目录

快速上手

基本用法

using Krypton.Toolkit;

// 创建保存文件对话框
var saveDialog = new KryptonSaveFileDialog();
saveDialog.Title = "保存文本文件";
saveDialog.Filter = "文本文件|*.txt|RTF 文件|*.rtf|所有文件|*.*";
saveDialog.FilterIndex = 1;
saveDialog.DefaultExt = "txt";
saveDialog.AddExtension = true;
saveDialog.OverwritePrompt = true;
saveDialog.FileName = "未命名.txt";

if (saveDialog.ShowDialog(this) == DialogResult.OK)
{
    File.WriteAllText(saveDialog.FileName, richTextBox.Text);
    lblStatus.Text = $"已保存:{saveDialog.FileName}";
}

另存为功能

private void SaveAs()
{
    var saveDialog = new KryptonSaveFileDialog();
    saveDialog.Title = "另存为";
    saveDialog.Filter = "C# 文件|*.cs|文本文件|*.txt|所有文件|*.*";
    saveDialog.DefaultExt = "cs";
    saveDialog.InitialDirectory = Path.GetDirectoryName(_currentFilePath);
    saveDialog.FileName = Path.GetFileName(_currentFilePath);

    if (saveDialog.ShowDialog(this) == DialogResult.OK)
    {
        File.WriteAllText(saveDialog.FileName, editor.Text);
        _currentFilePath = saveDialog.FileName;
        UpdateTitle();
    }
}

进阶用法

导出功能(多格式)

// 根据选择的过滤器决定导出格式
private void ExportReport()
{
    var dlg = new KryptonSaveFileDialog();
    dlg.Title = "导出报表";
    dlg.Filter = "PDF 文件|*.pdf|Excel 文件|*.xlsx|CSV 文件|*.csv|HTML 文件|*.html";
    dlg.FilterIndex = 1;
    dlg.DefaultExt = "pdf";
    dlg.FileName = $"报表_{DateTime.Now:yyyyMMdd_HHmmss}";

    if (dlg.ShowDialog(this) == DialogResult.OK)
    {
        switch (dlg.FilterIndex)
        {
            case 1: ExportToPdf(dlg.FileName); break;
            case 2: ExportToExcel(dlg.FileName); break;
            case 3: ExportToCsv(dlg.FileName); break;
            case 4: ExportToHtml(dlg.FileName); break;
        }

        KryptonMessageBox.Show(this,
            $"报表已成功导出到:\n{dlg.FileName}",
            "导出完成",
            MessageBoxButtons.OK,
            MessageBoxIcon.Information);
    }
}

自动保存与路径记忆

private string _lastSavePath = "";

private void SaveDocument()
{
    // 已有路径时直接保存,无需弹对话框
    if (!string.IsNullOrEmpty(_currentFilePath) && !_isDirty)
        return;

    if (string.IsNullOrEmpty(_currentFilePath))
    {
        var dlg = new KryptonSaveFileDialog();
        dlg.Title = "保存文档";
        dlg.Filter = "我的文档|*.mydoc|所有文件|*.*";
        dlg.DefaultExt = "mydoc";
        dlg.InitialDirectory = string.IsNullOrEmpty(_lastSavePath)
            ? Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
            : _lastSavePath;

        if (dlg.ShowDialog(this) != DialogResult.OK)
            return;

        _currentFilePath = dlg.FileName;
        _lastSavePath = Path.GetDirectoryName(dlg.FileName);
    }

    File.WriteAllText(_currentFilePath, SerializeDocument());
    _isDirty = false;
}
提示:设置 OverwritePrompt = true(默认值)时,如果用户指定的文件已存在,对话框会自动弹出"是否替换现有文件"的确认提示,无需手动处理。

对应示例项目

📁 Source/Krypton Toolkit Examples/KryptonSaveFileDialog Examples/

包含:基本保存、另存为、多格式导出、路径记忆演示。

相关控件