Jehoel.ShellFileDialogs 1.2.0

dotnet add package Jehoel.ShellFileDialogs --version 1.2.0                
NuGet\Install-Package Jehoel.ShellFileDialogs -Version 1.2.0                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="Jehoel.ShellFileDialogs" Version="1.2.0" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以便引用软件包。
paket add Jehoel.ShellFileDialogs --version 1.2.0                
#r "nuget: Jehoel.ShellFileDialogs, 1.2.0"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将该内容复制到交互工具或脚本的源代码中以引用软件包。
// Install Jehoel.ShellFileDialogs as a Cake Addin
#addin nuget:?package=Jehoel.ShellFileDialogs&version=1.2.0

// Install Jehoel.ShellFileDialogs as a Cake Tool
#tool nuget:?package=Jehoel.ShellFileDialogs&version=1.2.0                

ShellFileDialogs

这是什么?

如果您想使用 Windows Vista 后的现代文件打开、文件保存和文件夹浏览器对话框,则需要使用 Shell COM API,并且需要处理所有 Shell COM 接口和类型。

Microsoft Windows API Code Pack 会为您处理这些,您需要的同时安装 Microsoft.WindowsAPICodePack.dll 和 Microsoft.WindowsAPICodePack.Shell.dll - 总共计 632KB,Microsoft 也未能及时更新,因此 NuGet 上的最新软件包并非由 Microsoft 提供。它还提供了您可能不需要的更多功能。

而此组件只有 32KB,仅关于外壳对话框 - 而不是任何新的外壳和平台功能。您还可以将原始文件复制并粘贴到您自己的项目中。

NuGet

此库在 NuGet 上以两种形式提供

Jehoel.ShellFileDialogs

这是一个普通的 NuGet 软件包,包含为以下内容提供的单独的 assembly DLL(包含 PDB 和 XML 文档)

  • .NET Framework 4.8
  • .NET Standard 2.0
  • .NET Core 3.1(包括 C# 8.0 可空引用类型注释)

<del>Jehoel.ShellFileDialogs.Content</del>

(此包(Jehoel.ShellFileDialogs.Content)尚未发布,因为我无法让 NuGet 正常工作)

此 NuGet 包包含 ShellFileDialogs 作为 C# 源文件,并将其作为内容文件添加到您的项目中。然而,根据您的项目配置,其行为差异很大:

  • 如果您正在使用 SDK 风格的项目,或者与非 SDK 风格项目一起使用 <PackageReference>...
    • ...则 C# 源内容文件不会直接添加到您的项目中,而是在构建过程中添加。请注意,您不能(容易地)直接修改这些文件。这就是 NuGet 现在处理包内容文件的方式(即作为不可变内容)。
  • 如果您正在使用旧式的 package.config...
    • ...则 C# 源文件将添加到您项目的新子目录 ShellFileDialogs 中,您可以在其中按需编辑文件,但重新安装此 NuGet 包将覆盖您的更改。

用法

该 API 故意设计得简单。它可以安全地从任何上下文使用:控制台、WPF 或 WinForms。所有的 ShowDialog 方法都接受父窗口的 IntPtr hWnd。如果没有父窗口,您也可以指定 IntPtr.Zero

文件夹浏览器对话框

String selection = FolderBrowserDialog.ShowDialog( IntPtr.Zero, "Title", null );
if( selection == null )
{
	// Dialog cancelled
}
else
{
	Console.WriteLine( selection );
}

文件打开对话框

单个文件
Filter[] filters = new Filter[]
{
	new Filter( "Images", "gif", "png", "jpg", "jpeg", "heic", "webp" ),
	new Filter( "Videos", "mov", "wmv", "mp4", "mpeg", "mpg", "avi", "webm" ),
	new Filter( "Audio" , "mp3", "wma", "wav", "aac" ),
	new Filter( "All files" , "*" ),
};

String selection = FileOpenDialog.ShowSingleSelectDialog( IntPtr.Zero, "Title", initialDirectory: null, defaultFileName: null, filters: filters );
if( selection == null )
{
	// Dialog cancelled
}
else
{
	Console.WriteLine( selection );
}
多个文件
// The Filter class can parse WinForms filters:
Filter[] filters = Filter.ParseWindowsFormsFilter( @"Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*" );

String[] fileNames = FileOpenDialog.ShowMultiSelectDialog( IntPtr.Zero, "Title", initialDirectory: null, defaultFileName: null, filters: filters );
if( selection == null )
{
	// Dialog cancelled
}
else
{
	foreach( String fileName in fileNames ) Console.WriteLine( fileName );
}

文件保存对话框

String fileName = FileSaveDialog.ShowDialog( IntPtr.Zero, "Title", initialDirectory: null, defaultFileName: null, filters: filters );
if( fileName == null )
{
	// Dialog cancelled
}
else
{
	Console.WriteLine( "Save file dialog. Selected file: \"{0}\".", fileName );
}

反馈和建议

请发布到 GitHub 项目的问题页面:https://github.com/Jehoel/ShellFileDialogs/issues

产品 兼容的和额外的目标框架版本。
.NET net5.0 已计算. net5.0-windows 已计算. net6.0 已计算. net6.0-android 已计算. net6.0-ios 已计算. net6.0-maccatalyst 已计算. net6.0-macos 已计算. net6.0-tvos 已计算. net6.0-windows 已计算. net7.0 已计算. net7.0-android 已计算. net7.0-ios 已计算. net7.0-maccatalyst 已计算. net7.0-macos 已计算. net7.0-tvos 已计算. net7.0-windows 已计算. net8.0 已计算. net8.0-android 已计算. net8.0-browser 已计算. net8.0-ios 已计算. net8.0-maccatalyst 已计算. net8.0-macos 已计算. net8.0-tvos 已计算. net8.0-windows 已计算.
.NET Core netcoreapp3.1 兼容.
.NET Framework net48 兼容. net481 已计算.
兼容的目标框架
包含的目标框架(在包中)
了解有关目标框架.NET Standard的更多信息。
  • .NETCoreApp 3.1

    • 无依赖项。
  • .NETFramework 4.8

    • 无依赖项。

NuGet 包

此包没有被任何 NuGet 包使用。

GitHub 仓库

此包没有被任何流行的 GitHub 仓库使用。

版本 下载 最后更新
1.2.0 456 4/14/2021

1.0.0 - 从未发布。
1.1.0 - 从未发布。
1.2.0 - 作为 NuGet 包的初始发布。