Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# OpenFileDialog()-如何基于文件过滤器设置MultiSelect选项?_C#_Openfiledialog - Fatal编程技术网

C# OpenFileDialog()-如何基于文件过滤器设置MultiSelect选项?

C# OpenFileDialog()-如何基于文件过滤器设置MultiSelect选项?,c#,openfiledialog,C#,Openfiledialog,OpenFileDialog()-如何基于文件过滤器设置MultiSelect选项 我的OpenFileDialog可以选择两种类型的文件。这是使用的过滤器: “LFA或日志文件(.LFA.log)|.LFA;.log” 将MultiSelect属性设置为false 新的需求变化是:应该允许用户选择多个日志文件,但只能选择一个LFA文件 如果我将MultiSelect设置为true,它将允许选择多个日志和lfa文件 请告知是否有办法实现此功能?回答后,如果您不想关闭并重新打开“文件”对话框的UI

OpenFileDialog()-如何基于文件过滤器设置MultiSelect选项

我的OpenFileDialog可以选择两种类型的文件。这是使用的过滤器:

“LFA或日志文件(.LFA.log)|.LFA;.log”

将MultiSelect属性设置为false

新的需求变化是:应该允许用户选择多个日志文件,但只能选择一个LFA文件

如果我将MultiSelect设置为true,它将允许选择多个日志和lfa文件


请告知是否有办法实现此功能?

回答后,如果您不想关闭并重新打开“文件”对话框的UI,您实际上可以这样做。如果您的
是有效的文件选择
,则应该执行以下操作:

dlgFileBrowse.FileOk += (s,e) => {
   var dlg = s as OpenFileDialog;
   if (dlg == null) return;
   if (!IsValidFileSelectiom(dlg.FileNames))
   {
      // Or whatever
      MessageBox.Show("Please select one log/lfa file or multiple log files.");
      e.Cancel = true;
   }         
};

在调用
OpenDialog()

之前,现在就是这样处理需求的

        // Set filter for file extension and default file extension
        dlgFileBrowse.DefaultExt = ".log";
        dlgFileBrowse.Filter = "LFA or log files (.lfa, .log)|*.lfa;*.log";
        dlgFileBrowse.Title = "Select one LFA/Log file or multiple log files.";
        dlgFileBrowse.InitialDirectory = UserSettingsHelper.GetLastBrowsedPath();
       // Allow user to select multiple log files.
        dlgFileBrowse.Multiselect = true;
这就是我调用OpenBrowse对话框的方式

if (dlgFileBrowse.ShowDialog() == DialogResult.OK)
        {
            // Validate the file selection.
            if (IsValidFileSelectiom(dlgFileBrowse.FileNames))
            {
                // Processing my files here.
            }
            else
            {
                // Display selection criterion.
                this.UiMessage = "Please select one log/lfa file or multiple log files.";
            }
        }
其中验证采用以下单独方法处理

public bool IsValidFileSelection(string[] fileNames)
    {
        bool isValid = false;

        // There is no need to check the file types here.
        // As it is been restricted by the openFileBrowse

        if (fileNames != null && fileNames.Count() > 0)
        {
            if (fileNames.Count() == 1) // can be one .lfa file of one .log file
            {
                isValid = true;
            }
            else
            {
                // If multiple files are there. none shoulf be of type .lfa
                isValid = ! fileNames.Any( f => Path.GetExtension(f) == IntegoConstants.Lfa_Extension);
            }
        }

        return isValid;
    }

这涉及到最终用户的往返。如果这个验证可以在OpenFileDialog中完成,那就更好了。但不幸的是,我没有看到任何解决方案。

您能发布您目前使用的代码吗?谢谢您的回复。如果您可以使用非托管代码,这是可能的。请看morinfo@MaluMN查看我的更新答案,您实际上可以使用
FileOk
event@Sakura这太过分了,另外,许多对话框在不同的windows版本上会发生变化,所以依赖于选择句柄是一种不好的处理方式,当操作系统更改它们时,可能会导致问题