OpenFileDialog在.NET Core上

7 浏览
0 Comments

OpenFileDialog在.NET Core上

在.NET Framework中,您可以使用System.Windows.Forms.OpenFileDialog来打开具有本机Windows UI的文件,但这仅适用于Windows操作系统。

是否有适用于.NET Core或其他可替代的System.Windows.Forms.OpenFileDialog实现?

0
0 Comments

问题的原因是.NET Core本身不包含用于UI的API。.NET Core开发者也持有这个观点。解决方法是使用特定平台的外部库,例如Avalonia和GTK#。此外,如果不是非常依赖于.NET Core本身,还可以考虑使用UWP(基于.NET Standard但与.NET Core不同)。

0
0 Comments

在.NET Core添加对Windows桌面应用程序的支持之后,针对.NET Core的WPF和Windows Forms应用程序可以以与.NET Framework相同的方式使用OpenFileDialog和SaveFileDialog API。这些API已经被移植到在.NET Core 3及更高版本上运行的特定于Windows的桌面包中。

你知道如何在在Linux上运行的Windows窗体应用程序中为OpenFileDialog设置InitialDirectory吗?文件浏览器可以正常工作,但似乎无法接受任何使用`或/的初始目录。

这个问题的出现原因是在Linux上运行的Windows窗体应用程序无法正确设置OpenFileDialog的InitialDirectory属性。在Linux环境中,由于文件系统路径的不同,使用`或/作为初始目录的方式不起作用。

解决这个问题的方法是使用System.IO.Path类中的Path.Combine方法来构建正确的初始目录。可以通过以下方式设置InitialDirectory属性:

using System.IO;
// 获取应用程序当前的工作目录
string currentDirectory = Directory.GetCurrentDirectory();
// 设置初始目录为当前工作目录下的"Documents"文件夹
string initialDirectory = Path.Combine(currentDirectory, "Documents");
// 创建OpenFileDialog实例并设置InitialDirectory属性
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.InitialDirectory = initialDirectory;
// 打开文件对话框并处理用户选择的文件
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
    string selectedFile = openFileDialog.FileName;
    // 处理选择的文件
}

这样,无论应用程序在哪个操作系统上运行,都可以正确设置OpenFileDialog的初始目录。

0
0 Comments

在使用新的、闪亮的.NET 5.0 Windows应用程序和WPF控件时,可以使用Microsoft.Win32库中的OpenFileDialog()方法。这与Windows Forms版本不同,例如,ShowDialog()方法返回的是bool?而不是DialogResult。

下面是一个示例的MyWpfView.xaml.cs代码:

using Microsoft.Win32;
using System.Windows;
namespace TestProject
{
    public partial class MyWpfView
    {
        public MyWpfView()
        {
            InitializeComponent();
        }
        private void BrowseButton_Click(object sender, RoutedEventArgs e)
        {
            var fileDialog = new OpenFileDialog();
            if (fileDialog.ShowDialog() == true)
            {
                FileTextBox.Text = fileDialog.FileName;
            }
        }
    }
}

感谢提供"返回bool?而不是DialogResult"的信息!

0