OpenFileDialog() - 如何根据文件过滤器设置 MultiSelect 选项?
OpenFileDialog() - How to set the MultiSelect option based on the file filter?
OpenFileDialog() - 如何设置基于文件过滤器的多选选项?
我的 OpenFileDialog 可以 select 2 种类型的文件。这是使用的过滤器:
"LFA or log files (.lfa, .log)|.lfa;.log"
MultiSelect 属性 设置为 false。
新要求更改为:应允许用户 select 多个日志文件,但只能有一个 LFA 文件。
如果我将 MultiSelect 设置为 true,它将允许 select 多个日志和 lfa 文件。
请问有什么方法可以实现这个功能吗?
你回答后,如果你不想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 中完成此验证,那就更好了。但不幸的是,我没有看到任何解决方法。
OpenFileDialog() - 如何设置基于文件过滤器的多选选项?
我的 OpenFileDialog 可以 select 2 种类型的文件。这是使用的过滤器:
"LFA or log files (.lfa, .log)|.lfa;.log"
MultiSelect 属性 设置为 false。
新要求更改为:应允许用户 select 多个日志文件,但只能有一个 LFA 文件。
如果我将 MultiSelect 设置为 true,它将允许 select 多个日志和 lfa 文件。
请问有什么方法可以实现这个功能吗?
你回答后,如果你不想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 中完成此验证,那就更好了。但不幸的是,我没有看到任何解决方法。