0

C ++で.NETクラスOpenFileDialogを使用しようとしていますが、奇妙なバグが発生しています。私の基本的なコードは以下の通りです。

OpenFileDialog^ openFileDialog = gcnew OpenFileDialog;
openFileDialog->InitialDirectory = "c:\\";
openFileDialog->Filter = "Bitmap|*.bmp|All Files|*.*";
openFileDialog->FilterIndex = 1;
openFileDialog->RestoreDirectory = true;
if (openFileDialog->ShowDialog() == DialogResult::OK)
    MessageBox::Show(openFileDialog->FileName, "Information", MessageBoxButtons::OK, MessageBoxIcon::Information);

コードがこのポイントに達すると、期待どおりにダイアログが開きます。ただし、[ファイルの種類]プルダウンを切り替えると、ユーザーのように、ダイアログウィンドウに一覧表示されているファイルとディレクトリが(フィルターに関係なく)表示されなくなります。親ディレクトリに移動して同じ子ディレクトリに再度入ると、ファイルとディレクトリが正しく表示され、期待どおりにフィルタリングされます。なぜ私がこの奇妙なバグを抱えているのか誰かが知っていますか?

参考までに、私はWindows XP 64ビットSP2を使用しており、Visual Studio 2010 for.NET4でビルドしています。

4

1 に答える 1

0

これは純粋なオペレーティングシステムの動作です。ダイアログはシェル内にあり、.NETラッパークラスはGetOpenFileName()の周りの非常に薄いクラスです。

XP x64については、Vista x64の補助輪であったことを除けば、よくわかりません。まだx64に変換されていないいくつかのCOMサーバーでは実行されませんでした。そして、それがSP3アップデートを取得しなかったことは私には不愉快に聞こえました。顧客が同じ問題を目にする可能性は低いと想定できます。私はそれを確認するために今は1つに近づいていません。

于 2010-07-14T20:35:40.287 に答える