OpenFileDialog() - 如何根据文件过滤器设置多重选择选项

本文关键字:设置 过滤器 选项 选择 文件 何根 OpenFileDialog | 更新日期: 2023-09-27 18:35:45

OpenFileDialog() - 如何根据文件过滤器设置多选选项?

我的打开文件对话框可以选择2种类型的文件。这是使用的过滤器:

"LFA 或日志文件 (.lfa, .log)|.lfa;.日志"

将多选属性设置为 false。

新的要求更改是:应允许用户选择多个日志文件,但只能选择一个 LFA 文件。

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

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

OpenFileDialog() - 如何根据文件过滤器设置多重选择选项

回答后,如果您不希望文件对话框的 UI 关闭并重新打开,您实际上可以这样做。拥有你的IsValidFileSelection,这应该是一个做的问题:

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 中完成,那就更好了。但不幸的是,我没有看到任何解决方法。