CommonDialogで拡張子の変更

解決


恭ちゃん  2013-04-08 14:25:57  No: 143454  IP: [192.*.*.*]

VB6です。
コモンダイアログをShowSaveでFilterを複数指定し(例えばtxtとcsv)、また推奨するファイル名(例えばSample.txt)を指定して表示させています。ここでFilterにある拡張子をcsvに変更した時にファイル名の拡張子を自動的にcsvに変更できるようにしたいと思いますが方法がわかりません。  もしもこれができる方法がありましたら教えてください。

編集 削除
魔界の仮面弁士  2013-04-08 16:12:45  No: 143455  IP: [192.*.*.*]

> Filterにある拡張子をcsvに変更した時にファイル名の拡張子を
> 自動的にcsvに変更できるようにしたいと思いますが

たとえば、
  CommonDialog1.Filter = "Text format|*.TXT|Comma Separated Value format|*.CSV"
  CommonDialog1.FilterIndex = 1
  CommonDialog1.FileName = "Sample.txt"
  CommonDialog1.ShowSave
のようになっていた場合、ファイルの種類を変更すると、
ファイル名が "Sample.CSV" に自動的に変更されます。
(DefaultExt プロパティを設定するかどうかは任意です)

この拡張子の自動変更は、OS 側の機能として行われることなので、
特にプログラム側から何かする必要はないはずです。

もし、何らかの理由(古い OS を使っているな)で、そうした
拡張子の自動変更が働かないようであれば、ダイアログから
返却された FileName プロパティの内容を調べて、実際に使う前に
不足している拡張子を補うなどして対処してみてください。

編集 削除
魔界の仮面弁士  2013-04-08 16:25:26  No: 143456  IP: [192.*.*.*]

> 何らかの理由(古い OS を使っているなど)
最後の「ど」が抜けてた…!(滝汗)

---
手元の環境で試したところ、Windows 7 上で実行した場合は
拡張子が自動的に変化しましたが、Windows 2000 上で実行した場合は
自動的に変化しませんでした。
(ちなみに、Flag プロパティは 0 に設定した状態でテストしています)

おそらく、COMDLG32.DLL (COMDLG32.OCX ではない)のバージョンによる
違いだとは思いますが、いずれにせよ、
  「拡張子が自動変更されるかは、基本的には環境(OS)依存」
ということになるかと思います。

ダイアログ自体に手を加えるとなる大変なので、これは環境依存の問題と
割り切って、受け取った FileName 側から判定した方が良いと思います。

編集 削除
恭ちゃん  2013-04-08 17:38:02  No: 143457  IP: [192.*.*.*]

魔界の仮面弁士様  いつも、そして迅速なアドバイスをありがとうございます。OSの違いにより自動的に変わるものとそうでないものがあるということが分かり大変助かりました。

開発に使っているのはXPですが確かにこれは駄目でしたがWin7で試しましたら同じソフトですが自動的に変わりました。XPは既に40%になったとTVで報じられていましたので現状のままとすることにしました。ありがとうございました。

編集 削除