[VB6] コモンダイアログに関する考察

VBのコモンダイアログにはバグある。
ShowOpen とShowSaveのメソッドを呼び出した際に現在閲覧中のディレクトリが
アプリケーションの動いているディレクトリとしてみなされてしまうバグだ。

どうなるかというとコモンダイアログを使用したあとに App.Path や Curdir() を実行した場合のディレクトリが
プログラマの予期せぬディレクトリになっているということだ。

この為、VB6でコモンダイアログを使用した場合には必ず
・ChDrive 関数
・ChDir 関数
を実行する必要がある。
安易に
Chdir(Left(App.Path,1))
Chdir(App.Path)
なんてやっても駄目だ。これではネットワーク越しに実行した際に
Chdirの方が実行に失敗する。

それともう1点。コモンダイアログとタイマーコントロールは非常に相性が悪い。
具体的に言うとコモンダイアログでShowOpen、ShowSaveでファイル選択のダイアログを開いている時でも
タイマーコントロールは動いているということだ。
タイマーコントロールでファイルを操作、ディレクトリを操作しているともうどうしようも無いくらいにプログラムが変に動く。
なのでコモンダイアログで所定の関数を呼び出す際には必ずタイマーを止めておくことを強くお勧めしたい。

2日間悩んだ亡者より

Posted by namahage