Пользовательский фильтр OpenFileDialog C#, например "ABC".в формате PDF'
можно ли указать пользовательские фильтры, такие как ' ABC*.pdf 'что означает:" показать все PDF, который начинается с ABC"?
Я могу только указать *.документ PDF.* ,док, ., etc.
спасибо Флориан!--1-->
5 ответов
Обновлено
немного изменил мое решение, поняв, что следующее Было бы лучше. Это не полный "жесткий фильтр", но использование FileName
свойство должно в принципе дать вам то, что вам нужно;
using System;
using System.Windows.Forms;
namespace TestingFileOpenDialog
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.openFileDialog1.FileName = "pro*";
this.openFileDialog1.Filter = "Pdf Files|*.pdf";
this.openFileDialog1.ShowDialog();
}
}
}
Я полагаю, это может зависеть от того, с какой ОС вы работаете, но в моем случае это сработало в любом случае, на Windows 8.
Я также понимаю, что это не отфильтровать все ненужные файлы "постоянно", но он, по крайней мере, обеспечивает начальный фильтр.
результат:
без pro*
в поле FileName-появится несколько других PDF-файлов.
да и нет.
нет: посмотри MSDN страница. Фильтр не используется таким образом. Это только для расширений.
Да: вы можете написать свой собственный класс, который расширяет / имитирует OpenFileDialog, иметь некоторые регулярные выражения, чтобы делать то, что вы хотите, и просто запустить это совпадение со всеми файлами в текущей папке (может потребоваться некоторая работа, но если вы действительно хотите этого так плохо, идите на это :) )
как указано в моем комментарии:
к сожалению это не возможно. Но вы можете создать свой собственный FileDialog
чтобы создать свой собственный FileDialog, вы можете использовать следующие методы:
string[] Directories = Directory.GetDirectories(Path);
string[] Files = Directory.GetFiles(Path);
теперь фильтр Files
-массив к вашим спецификациям:
List<string> wantedFiles = Files.ToList().Where(x => x.StartsWith("ABC"));
чтобы получить значки файлов, вы должны использовать DLLImport
из Заshell32.dll:
[DllImport("shell32.dll")]
код, указанный в этом поэтому вопрос должны решить проблему.
проект, который реализует собственные FileDialogs, написанные моим братом, можно найти здесь: проект скачать
короче говоря, это должно сделать трюк:
foreach (string file in Directory.GetFiles(Path)
.Where(x => new DirectoryInfo(x).Name.StartsWith("ABC")))
{
//Add the string to your ListView/ListBox/...
}
ответ прямой : нет
вы можете установить фильтры, чтобы разрешить только определенные типы файлов с имущества Filter
asbelow :
fileOpenDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
но фильтрация имен файлов NOT
возможно.
вы можете создать свой собственный OpenFIleDialog
в этом случае.
см. эту ссылку для получения дополнительной информации:как создать настроенный диалог открытия файла в C#
используйте этот:
Microsoft.Win32.OpenFileDialog myDialog. = new Microsoft.Win32.OpenFileDialog();
myDialog..DefaultExt = ".pdf";
myDialog.Filter = "FilesIWant (ABC*.pdf)|ABC*.pdf