3

OpenFileDialogを使用してインポートするファイルを取得するC# .NET 3.5 プログラムがあります。2 つのフィルター (*Domain*.*および*.*) があり、*Domain*.*が として選択されますFilterIndex。内でファイルを変更すると、フィルターからファイルが消えるケースが見られますOpenFileDialog

ユーザーが問題を再現するために実行する手順は次のとおりです。

  1. プログラムで、 を開きますOpenFileDialog。フィルタが に設定されていることを確認し*Domain*.*ます。
  2. フィルターに一致するディレクトリー内のファイルを見つけて、フィルターに一致しないようにファイル名を変更します。注: ファイルは消えます。
  3. すべてのファイルを表示するようにフィルターを変更します*.*注: ファイルが表示されているはずですが、ファイルはリストされていません*.*

この時点で、Windows エクスプローラーでフォルダーを開くと、名前が変更されたファイルが存在することがわかります。ただし、 では、OpenFileDialog使用されているフィルタに関係なく表示されなくなりました。そのファイルを再度表示する唯一の方法は、 を閉じてから再度OpenFileDialog開くことです。

を作成する私のコードは次のとおりOpenFileDialogです。

using(OpenFileDialog domainFileDialog = new OpenFileDialog())
{
    domainFileDialog.CheckFileExists = true;
    domainFileDialog.CheckPathExists = true;
    domainFileDialog.Filter = "Domain Files (*Domain*.*)|*Domain*.*|All files (*.*)|*.*";
    domainFileDialog.FilterIndex = 1;
    domainFileDialog.Multiselect = false;
    domainFileDialog.RestoreDirectory = true;
    domainFileDialog.ShowReadOnly = true;
    domainFileDialog.SupportMultiDottedExtensions = true;
    domainFileDialog.Title = "Choose the Domain File to Import...";
    domainFileDialog.ValidateNames = true;

    \\ Perform Import functionality...
}

を開き、OpenFileDialogより制限の厳しいフィルターに一致する既存のファイルを変更して、フィルターに一致しないようにすると、すべてのファイルが表示されている場合でも、ファイル*.*が表示されなくなります。

なぜこれが起こっているのかわからないので(そしてそれを修正する方法についての提案をお待ちしています)、OpenFileDialogこの問題を防ぐために、ユーザーがファイルを作成または変更することを制限する方法はありますか?

4

2 に答える 2

1

まず、ユーザーがこれを行う可能性があることに注意する価値があるかどうかを検討することをお勧めします。FOD がこれを行う場合、すべての Windows アプリケーションにこの機能がありますが、ユーザーがそれについて不満を言うことはありません。それで、それは本当に修正が必要な問題ですか?

問題が単なるファイル拡張子以上のフィルタに関連している場合でも、私は驚かないでしょう。これを行うのはかなり型破りです。拡張機能のみで試してみて、これが原因かどうかを確認してください。

F5 キーを押して、キャッシュされたデータを更新してみましたか? これがエクスプローラ ウィンドウでのように FOD でも機能するかどうかはわかりませんが、試してみると面白いかもしれません。

そうは言っても、キープレス (F2) とマウス クリック (右ボタン) をフィルター処理するのは簡単です) (いくつかのフォームを使用して派生させるか、ドロップインしMessageFilterて、ユーザーがアクセスできないようにすることができます)。 FOD 内のファイルの名前を変更できる UI。ただし、この方法でFODを壊した場合、ユーザーとして私は腹を立てます-とにかく、まれな状況で名前が変更されたファイルが「消える」よりもはるかに多くの.

于 2012-12-08T00:24:34.783 に答える
0

http://msdn.microsoft.com/en-us/library/microsoft.win32.openfiledialog.aspx

OpenFileDialog 自体は、そのような機能をサポートしていません。この時点で最善の策は、独自のファイルを開くダイアログ ウィンドウを作成することだと思います。そうすれば、かなりのコントロールを得ることができ、それほど時間はかかりません。

于 2012-12-07T22:57:31.130 に答える