18

C# でファイルを開くダイアログを使用すると、奇妙な動作が発生することがわかりました。

現在の作業ディレクトリでこのコードを使用するWindows XPと、選択したファイルのパスが変更されますがWindows 7、現在の作業ディレクトリでこのコードを実行しても変更されません。

    private void button1_Click(object sender, EventArgs e)
    {            
        MessageBox.Show(string.Format("Current Directory {0}",Directory.GetCurrentDirectory()), "My Application",MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
        DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog and get result.
        if (result == DialogResult.OK) 
        {

        }
        MessageBox.Show(string.Format("Current Directory {0}", Directory.GetCurrentDirectory()), "My Application", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
    }

誰でもこの動作の理由を知っていますか? 現在のディレクトリが ではなく XP で変更されるのはなぜWindows 7ですか?

4

2 に答える 2

16

あなたの説明によると、XP と Windows7 ではRestoreDirectoryプロパティのデフォルト値が異なるようです。なぜそうなるのかはわかりませんが、コードで値を明示的に設定することでこの問題を解決できます。true に設定すると、ダイアログを閉じたときにディレクトリが復元されます。

于 2010-06-10T22:28:10.843 に答える
10

FileDialog (OpenFileDialog の基本クラス) には AutoUpgradeEnabled というプロパティがあり、Vista および新しいオペレーティング システムで実装された新しいファイル ダイアログが利用可能になったときに、それをダイアログが利用するかどうかを制御します。(内部的には、これは comdlg32 で GetOpenFileName を呼び出す場合と IFileDialog インターフェイスを使用する場合の違いです)。

これを行う理由は、新しいダイアログが「場所」バーなどの多くの機能をサポートしているためです (CustomPlaces コレクションを参照)。これの予期しない副作用は、新しい IFileDialog の実装では現在のディレクトリが変更されないのに対し、古いバージョンでは変更されないことです。

これはファイル ダイアログの実装のバグであり、RestoreDirectory プロパティの値に関係なく発生します。

新しいファイル ダイアログ機能を使用したくない場合、最も簡単な方法は、AutoUpgradeEnabled を false に設定することです。

于 2010-06-22T18:55:36.873 に答える