• ベストアンサー

VB6でコモンダイアログにバグ?がある

VB6でコモンダイアログにバグ?があるということ聞いたことがあるのですが、具体的な内容はわかりません。この問題は解決できるのでしょうか? このコンポーネントの代わりになるものはあるのでしょうか? VB6で作成して、.NETに移行しますが、このコンポーネントの使用は避けた方が良いでしょうか?

  • hdkoa
  • お礼率0% (1/117)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

コモンダイアログでカレントディレクトリが変わる、というのは バグではなくて仕様でしょう。 カレントディレクトリを変えたくない場合は、 cdlOFNNoChangeDir という定数を使います(VB6 の場合)。 App.Path が変わる、というのが本当ならそれはバグですけど、 とりあえずこんなコードで、コモンダイアログで別のディレクトリに 移動しても、App.Path は変わりませんでした。 MsgBox "before: " & vbCrLf & "App.Path=" & App.Path & vbCrLf & "CurDir$=" & CurDir$ 'CommonDialog1.Flags = cdlOFNNoChangeDir CommonDialog1.ShowOpen MsgBox "after: " & vbCrLf & "App.Path=" & App.Path & vbCrLf & "CurDir$=" & CurDir$ 「App.Path」と、「カレントディレクトリ」は、 ぜんぜん別物で、同じトコロを指していることが多いからといって 混同しないように注意するべきです。

その他の回答 (4)

回答No.5

> 「VB6の開発環境上で新規プロジェクトを作成し、 > プロジェクトファイルを1度も保存していないで実行する」 確認しました。カレントディレクトリにつられて App.Path が変わりますね。 この条件なら App.Path が変わるのも納得です。ありがとうございます。 さて、元質問者さん放ったらかしで申し訳ないので、元質問に関して調べてみました。 http://www.google.co.jp/search?q=%83R%83%82%83%93%83_%83C%83A%83%8D%83O+%83o%83O+site%3Amicrosoft.com Win95 や NT4 や VB4 の頃にはいくつかバグがあったようです。 個人的には、コモンダイアログではどうしても機能が不足する、というのでなければ、 あらかじめ用意されているコンポーネントを使った方がいいと思います。 標準のコンポーネントなら、バグがあっても 「マイクロソフトのバグなのでどうにもできません」 って言い訳が通用する……かな?

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.4

> App.Path が変わる、というのが本当ならそれはバグですけど、 この現象についても体験したことがあります。 以下の場合に発生しました。 「VB6の開発環境上で新規プロジェクトを作成し、 プロジェクトファイルを1度も保存していないで実行する」 私は、 「プロジェクトファイルの位置が未定」なので、 「App.Pathの位置も未定」 仕方がないので、「カレントディレクトリを返す」。 と言う「仕様」だと思ってます。

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.2

> ShowOpen や ShowSave を実行した後で App.Path や Curdir() がおかしくなる、と書かれています。 この現象は知ってましたが・・・仕様だと思ってました。 ちなみに、「CurDir」(カレントフォルダ)に関しては、 「ExcelVBA」で「Application.GetOpenFilename」を使用した場合、 「VB6」でWin32APIの「GetOpenFileName」を使用した場合、 「VB2005」で「OpenFileDialog」を使用した場合、 にも発生しますから、もし「バグ」だとすると、 「VBのコモンダイアログのバグ」と言うより、 「Windowsのコモンダイアログのバグ」だと思いますけど・・・

  • chimaki-t
  • ベストアンサー率41% (108/261)
回答No.1

検索してみました。 参考URLに ShowOpen や ShowSave を実行した後で App.Path や Curdir() がおかしくなる、と書かれています。 私も、今回初めて知るバグです。ありがとうございます。

参考URL:
http://www.google.co.jp/search?q=cache:http://namahage.dip.jp/blog/archive/2005/03/23/378.aspx

関連するQ&A

  • コモンダイアログコントロールがコンポーネントにありません

    VB6.0 win2000を使用しています。 コモンダイアログを使用したいと思い、 メニューの[プロジェクト]-[コンポーネント]Microsoft Common Dialog Control 6.0にチェックを入れようとしたところ、 メニューにMicrosoft Common Dialog Control 6.0がありません。 これはどうしたらいいのでしょうか? VB超初心者です。 よろしくご指導お願いします_(__)_

  • コモンダイアログの表示

    VB.NETでエクセルをコントロールするS/Wを作っています保存時にコモンダイアログを表示させたいのですが、ツールBOXに見あたりません。どうすれば出てきますか。

  • コモンダイアログ・カラーの代替え

     コモンダイアログで、カラーを選択することができますよね。このコモンダイアログ・カラーを使用せずに、自分で同様なものを作成したいのですが、デフォルトで表示されてくる複数の色たちが、どのようにして決められているか解りません。  これらの色は、システムから取得できるのでしょうか?それとも、決めうちをしないといけないのでしょうか?  また、具体的に手法を教えていただければ幸いです。  なお、カスタムカラーを使用するつもりはないので、この部分を除いて、教えていただければ結構ですので、よろしくお願いします。

  • Delphi5.0Pro の コモンダイアログについて

    Delphiでは、 OpenDialogなど、コモンダイアログがコンポーネントとして、利用できますが、 あのダイアログは、comdlg32.ocxに依存しているのでしょうか? VBにてcomdlg32.ocxを利用していたのですが、 comdlg32.ocxのバージョンの違いによる誤動作などに悩まされています。 Delphiでも、comdlg32.ocxに依存しているのであれば、 comdlg32.ocxのバージョンの違いによる誤動作は回避できないので、 その辺りのことが知りたいです。 よろしくお願いします。

  • コモンダイアログの表示座標

    フルスクリーンモードで、WinAPIの「GetOpenFileName」や 「GetSaveFileName」などのコモンダイアログを使用する際、 稀にダイアログが表示されない時がありました。 おそらくフルスクリーンモードで表示されている領域よりも外側に 表示されていると思うので、ダイアログを表示する座標を指定したいのですが、 その方法が分からず困っております。 ご存知の方いらっしゃいましたらお教えください、 宜しくお願い致します。

  • Excel97のVBAでコモンダイアログを使いたい

    現在Excel97で二つのテキストデータベース(固定長形式)を読み込み、解析を行おうとしています。 現在、べたに二つのファイルのパスをコードに書き込めばファイルの読み込みも上手くいくのですが、やはりここは出来るならばファイル指定を汎用のダイアログで行えるようにしたいと思いあれこれ方法を探しています。 そこで読み込みたい二つのファイルのパスを、VBで利用できるCommonDialogで取得出来るなら、一からファイル選択用フォームを作成しなくても済むので楽になると思いついたのですが、Excel97のVBAでの転用がうまくいかなくて企画倒れの状態になっています。 参照設定でComCtrl32.OCXを読み込めればと思い試験してみたもののうまくいかず、次の方法が見つからずに途方に暮れています。 もしかしてVBAではコモンダイアログは利用できないのでしょうか?

  • VB6とVB.NET

    新しく入力コンポーネントを買うにあたり、 VB.NET製品を買うべきか、VB6製品を買うべきか迷っています。 VB.NETはPOCKETPCでの開発に一度使いましたが、 今まで作成したソフトは、殆どVB6で行っています。 しかし、今後VB6での開発に問題があるのであれば、 これからは、VB.NETでの開発に切り替えようかなとも思います。 今後のことを考えて、VB.NETで開発した方が良いのか、 VB6で開発し続けると問題があるのか等、VB6/VB.NETの メリットデメリットを教えて頂ければと思います。

  • コモンダイアログコントロールで選択されたブリンター名を得る方法を教えて下さい。

    現在VB5で作業をしています。 コモンダイアログコントロールで選択されたブリンター名を得る方法を教えて下さい。 作成中のアプリケーションが通常使うプリンタ名をユーザーにコモンダイアログで選択してもらってそのプリンタを次回起動時にすぐ使えるようにPrintersオブジェクトで選択出来るようにする為に保存しておくのが目的です。(Windowsのシステムで設定している「通常使うプリンタ」とこのアプリケーションが通常使うプリンタとは必ずしも一致しないことを前提に) そして、PrinterDefault=Falseの時、選択されたプリンタ名を再びコモンダイアログに反映する方法も教えて頂きたいです。 [印刷] 及び[プリンタの設定] ダイアログ ボックスでユーザーが選択をしたプリンター名をコードで得る方法がよく解りません。 ShowPrinterメソッド発行前に設定出来る「Flags」の定数に、 cdlPDReturnDefault &H400 通常使うプリンタ名を取得します。 とヘルプには有りますが、どのような手段でこれを使って選択したプリンタ名を取り出せば良いのかよく解りません。 又、定数「cdlPDReturnDC」「cdlPDReturnIC」には、「プリンタの情報コンテキストは、ダイアログ ボックスの hDC プロパティに格納されます。」と言うような説明が有るので、その中でプリンタ名が書かれているのかなと思ったりもしますが、どの様に利用すれば良いのかも判りません。 何分VBの使用経験が少な過ぎるのであまりよく解っていないので噛み砕いて教えて頂ければ幸いです。 よろしくお願いします。

  • VBについて

    VB6.0でコモンダイアログボックスにてファイルを指定をしたいのですがどの様にしたらいいのでしょうか? 得意な方わかりやすく教えてください。(ファイルを読み込んでCSVファイル等へ表示したいのですが)

  • コモンダイアログを使用してファイル保存する場合の拡張子の指定について(初心者)

    こんばんは VB初心者です。 コモンダイアログを使用してファイルを保存する場合に"ファイル名+拡張子"を入力しないと拡張子なしのファイルで保存されてしまいます。自動的に任意の拡張子を付与することは出来るのでしょうか? よろしくお願いします。

専門家に質問してみよう