2

アプリケーションがWindows Formあり、ユーザーが画像を選択して保存できるカスタム コントロールを使用しています。ただし、いくつかの制限を挿入する必要があります。簡単なのはjpgファイルのみを選択することでしたが、名前に特定のパターンが含まれる画像のみを表示および選択できるようにユーザーを制限する必要がjpgあり、可能であれば (これが他の Windows アプリケーションで実装されているのを見たことがあると思います)このパターンをFile Nameフィールドに残し、ユーザーが削除できないようにします。

私が今までやってきたこと:

私は制限を設定しています:

    fileNameFilter = "All files (*.jpg)|" + ImageNameFilter + "*.jpg";
    openFileDialog1.Filter = fileNameFilter;

どのパターンを探す必要があるかをユーザーに示すことができます。

openFileDialog1.FileName = fileNameFilter;

しかし、まだ達成できていないことが 2 つあります。これを明確にするための印刷画面を次に示します。

ここに画像の説明を入力

最初に-パターンが表示されますが、このように作成されたときに削除できます。File nameフィールドが可能かどうRead onlyか、つまり、ユーザーがそこに置いたものを削除できないようにする必要があります。

2 番目 - これは、ファイルが名前の制限/フィルターに一致しない場合でも、以前に開いたファイルのリストであり、ユーザーはリストから選択してそのファイルを保存できます。可能であれば、File Dialog開いたときにこのリストを消去するか、ユーザーがこのファイルを保存できないようにする必要がありますが、2番目の方法では余分なビジネスロジックが必要になりすぎると思うので、リストを消去することをお勧めします。

4

2 に答える 2

3

ファイル ダイアログに表示される内容を、フィルターやファイル名のパターンで厳密に制御しようとしてもうまくいきません。ユーザーはいつでも独自のパターンをファイル名編集ボックスに入力できます。

ファイル ダイアログの機能を使用して、表示するオブジェクトを制御する必要があります。残念ながら、C# ラッパーは、基になる Win32 コントロールによって提供されるこの機能を公開していません。

XP をサポートする必要がある場合は、CDN_INCLUDEITEM通知をリッスンする必要があります。これは、フォルダー内のアイテムごとに送信されます。したがって、各アイテムの包含を許可または拒否する機会が得られます。

Vista 以降で使用されるダイアログの場合は異なります。これらのダイアログでは、IFileDialog. SetFilterフィルターを追加するには、メソッドを呼び出す必要があります。そのフィルターはIShellItemFilter、メソッドを使用して包含を制御する実装ですIncludeItem

これをすべて C# から行うのは少し面倒ですが、これが正しい方法です。これを行えば、ファイル名編集ボックスを読み取り専用にしようと考える必要さえありません。ダイアログには、含めることを許可したアイテムのみが表示されるためです。

于 2013-02-28T10:51:18.330 に答える
2

いいえ

2 つの解決策: [開く] をクリックした後にファイル名を確認するか (とにかくこれを行う必要があります)、ファイル名のパターンに一致するファイルを表示する独自のコントロールを作成します。

于 2013-02-28T10:36:17.340 に答える