具有许多扩展的 OpenFileDialog
OpenFileDialog with many extensions
我需要为 1000 种文件类型 (*.000 - *.999) 打开文件对话框。
但是将它添加到过滤器中,对话框在选择文件类型时变得非常慢。我可以做些什么来加快速度吗?
string text;
for (int i = 0; i <= 999; i++)
{
text.Append("*." + i.ToString("000") + "; ");
}
string textWithoutLastSemicolumn = text.ToString().Substring(0, text.ToString().Length - 2);
dialog.Filter = "Files (" + textWithoutLastSemicolumn + ")|" + textWithoutLastSemicolumn;
我已经尝试 运行 宁 OpenFileDialog
并且在我的情况下似乎 运行 很快:
StringBuilder sb = new StringBuilder();
for (int i = 0; i <= 999; i++)
{
sb.Append("*.");
sb.Append(i.ToString("000"));
sb.Append("|");
}
sb.Remove(sb.Length - 1, 1);
string text = sb.ToString();
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Files (" + text + ")|" + text;
ofd.ShowDialog(this);
我已经使用 StringBuilder
构建了过滤器。然后将其转换为字符串并传递给它 .Filter
属性.
只是为了确保这里有一段代码可以在文件类型列表框中输入 1000 个条目:
StringBuilder sb = new StringBuilder();
for (int i = 0; i <= 999; i++)
{
sb.Append("*.");
sb.Append(i.ToString("000"));
sb.Append("|");
}
sb.Remove(sb.Length - 1, 1);
string text = sb.ToString();
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = text;
ofd.ShowDialog(this);
您可以添加以下行。
dialog.AutoUpgradeEnabled = false;
OpenFileDialog
的 属性 将设置当 运行 在 vista 或更高版本上时对话框是否应该升级它的行为和外观。通过将其设置为 false
,我们使 UI 渲染更简单,从而使对话框更快。
这是我试过的代码:
OpenFileDialog dialog = new OpenFileDialog();
StringBuilder text = new StringBuilder();
for (int i = 0; i <= 999; i++)
{
text.Append("*." + i.ToString("000") + "; ");
}
string textWithoutLastSemicolumn = text.ToString().Substring(0, text.ToString().Length - 2);
dialog.AutoUpgradeEnabled = false;
dialog.Filter = "Files (" + textWithoutLastSemicolumn + ")|" + textWithoutLastSemicolumn;
dialog.ShowDialog();
我将此添加到空 Windows 表单的 Load 事件中
如果您受困于这些扩展,我可以看到 2 种可能的解决方案。要么接受这个相当快但不是 100% 正确的解决方案:
ofd.Filter = "Supported extensions | *.0??;*.1??;*.2??;*.3??;*.4??;*.5??;*.6??;*.7??;*.8??;*.9??";
这将接受您的所有扩展名,但也接受 .0a1、.99y 等值。如果您知道这些文件扩展名在您的情况下不会成为问题,这可能是一个不错的选择。
另一种解决方案可能是自己实现 OpenFileDialog 并支持正则表达式作为过滤器。这将是性能和安全方面最好的解决方案,但我不知道它会有多难。
我需要为 1000 种文件类型 (*.000 - *.999) 打开文件对话框。 但是将它添加到过滤器中,对话框在选择文件类型时变得非常慢。我可以做些什么来加快速度吗?
string text;
for (int i = 0; i <= 999; i++)
{
text.Append("*." + i.ToString("000") + "; ");
}
string textWithoutLastSemicolumn = text.ToString().Substring(0, text.ToString().Length - 2);
dialog.Filter = "Files (" + textWithoutLastSemicolumn + ")|" + textWithoutLastSemicolumn;
我已经尝试 运行 宁 OpenFileDialog
并且在我的情况下似乎 运行 很快:
StringBuilder sb = new StringBuilder();
for (int i = 0; i <= 999; i++)
{
sb.Append("*.");
sb.Append(i.ToString("000"));
sb.Append("|");
}
sb.Remove(sb.Length - 1, 1);
string text = sb.ToString();
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Files (" + text + ")|" + text;
ofd.ShowDialog(this);
我已经使用 StringBuilder
构建了过滤器。然后将其转换为字符串并传递给它 .Filter
属性.
只是为了确保这里有一段代码可以在文件类型列表框中输入 1000 个条目:
StringBuilder sb = new StringBuilder();
for (int i = 0; i <= 999; i++)
{
sb.Append("*.");
sb.Append(i.ToString("000"));
sb.Append("|");
}
sb.Remove(sb.Length - 1, 1);
string text = sb.ToString();
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = text;
ofd.ShowDialog(this);
您可以添加以下行。
dialog.AutoUpgradeEnabled = false;
OpenFileDialog
的 属性 将设置当 运行 在 vista 或更高版本上时对话框是否应该升级它的行为和外观。通过将其设置为 false
,我们使 UI 渲染更简单,从而使对话框更快。
这是我试过的代码:
OpenFileDialog dialog = new OpenFileDialog();
StringBuilder text = new StringBuilder();
for (int i = 0; i <= 999; i++)
{
text.Append("*." + i.ToString("000") + "; ");
}
string textWithoutLastSemicolumn = text.ToString().Substring(0, text.ToString().Length - 2);
dialog.AutoUpgradeEnabled = false;
dialog.Filter = "Files (" + textWithoutLastSemicolumn + ")|" + textWithoutLastSemicolumn;
dialog.ShowDialog();
我将此添加到空 Windows 表单的 Load 事件中
如果您受困于这些扩展,我可以看到 2 种可能的解决方案。要么接受这个相当快但不是 100% 正确的解决方案:
ofd.Filter = "Supported extensions | *.0??;*.1??;*.2??;*.3??;*.4??;*.5??;*.6??;*.7??;*.8??;*.9??";
这将接受您的所有扩展名,但也接受 .0a1、.99y 等值。如果您知道这些文件扩展名在您的情况下不会成为问题,这可能是一个不错的选择。
另一种解决方案可能是自己实现 OpenFileDialog 并支持正则表达式作为过滤器。这将是性能和安全方面最好的解决方案,但我不知道它会有多难。