web-dev-qa-db-ja.com

「ABC * .pdf」のようなOpenFileDialog C#カスタムフィルター

「ABC * .pdf」のようなカスタムフィルターを指定することは可能ですか?「すべてを表示PDFこれはABCで始まります」?」

指定できるのは* .pdf、*。doc、などのみです。

ありがとうフロリアン

15
user2071938

Updated

次の方が良いことに気づいた後、私のソリューションを少し変更しました。

これは完全な「ハードフィルター」ではありませんが、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();
        }
    }
}

これは、使用しているOSに依存する可能性がありますが、私の場合はWindows 8で動作します。

また、これはすべての無関係なファイルを「永続的に」除外するわけではありませんが、少なくとも最初のフィルターは提供します。

結果:
なしpro* [FileName]フィールドに、他のいくつかのPDF files)が表示されます。

enter image description here

27
Kjartan

はいといいえ。

No[〜#〜] msdn [〜#〜] ページをご覧ください。フィルターはそのようには使用されません。拡張機能専用です。

はい:OpenFileDialogを拡張/模倣する独自のクラスを作成し、必要な処理を行う正規表現を使用して、現在のフォルダー内のすべてのファイルに対して単純に一致するものを実行できます(作業が必要になる場合があります、しかし、あなたが本当にそれがとても悪いことを望むならば、それのために行きなさい:))

3
Noctis

私のコメントで述べたように:

残念ながらそれは不可能です。ただし、独自のFileDialogを作成できます

独自のFileDialogを作成するには、次の方法を使用できます。

  string[] Directories = Directory.GetDirectories(Path);
  string[] Files = Directory.GetFiles(Path);

Files- Arrayを仕様に合わせてフィルターします。

List<string> wantedFiles = Files.ToList().Where(x => x.StartsWith("ABC"));

ファイルアイコンを取得するには、Shell32.dllのDLLImportを使用する必要があります。

[DllImport("Shell32.dll")]

これで提供されるコード SOの質問 は問題を解決するはずです。

私の兄弟によって書かれた独自のFileDialogsを実装するプロジェクトはここにあります: Download project

要するに、これでうまくいくはずです:

foreach (string file in Directory.GetFiles(Path)
                                 .Where(x => new DirectoryInfo(x).Name.StartsWith("ABC")))
{
    //Add the string to your ListView/ListBox/...
}
3
jAC

答えは簡単です:[〜#〜] no [〜#〜]

プロパティFilter asbelowで特定のファイルタイプのみを許可するようにフィルターを設定できます。

fileOpenDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";

ただし、ファイル名のフィルタリングはNOT可能です。

その場合、独自のカスタムOpenFIleDialogを作成できます。

詳細については、このリンクを参照してください。 C#でカスタマイズされたファイルを開くダイアログを作成する方法

0