- 題名: コモンダイアログが正しく表示されない
- 日時: 2013/04/07 10:31:31
- ID: 31446
- この記事の返信元:
- (なし)
- この記事への返信:
- [31448] 【報告】この投稿はマルチポストです2013/04/07 17:47:37
- [31458] Re[1]: コモンダイアログが正しく表示されない2013/04/08 11:15:15
- ツリーを表示
■No31446に返信(eboさんの記事)
> 添付画像のようになっています。
手元の Win7 で OpenFileDialog を使ってみました。
using (var ofd = new OpenFileDialog())
{
ofd.Title = "ホームページデータのCSVファイルを選択してください";
ofd.Filter = "CSVファイル(*.CSV)|*.CSV|すべてのファイル(*.*)|*.*";
ofd.FileName = @"Z:\SAMPLE\TEST.CSV"; //存在しないドライブ
//ofd.AutoUpgradeEnabled = false;
ofd.ShowDialog();
}
比べてみると、ファイル一覧が表示されない件だけでなく、
「ファイル名」「ファイルの種類」「OK」「キャンセル」の
ボックス位置が、通常と異なっているように思えます。
…比較画像を作ったのですが、スレッド内の添付領域が残り28KBしかなく、
画質が荒くなってしまいました。文章で説明すると、下記のような配置です。
私の環境(AutoUpgradeEnabled = false)
※左上システムメニューアイコン:有
ファイル名 開く
ファイルの種類 キャンセル
私の環境(AutoUpgradeEnabled = true):
※左上システムメニューアイコン:有
ファイル名 ファイルの種類
開く キャンセル
問題の出ているeboさんの環境
※左上システムメニューアイコン:無し
ファイル名 開く キャンセル
ファイルの種類
> 自分のPCやその特定のPC以外では問題なく表示されていますので、
正常に表示される他のPCにおいて、ファイルの種類ボックスや
ボタンの配置は、それぞれ一致していますか?
また、OpenFileDialog / SaveFileDialog を経由させていない
他のアプリケーションのダイアログ表示は正常ですか?
ダイアログを表示するだけの簡単な実験アプリを作成し、
そのビルドを x86ビルド/x64ビルド/AnyCPU ビルドの 3 種に
それぞれ変更した場合、EXE の実行結果には差異は生じますか?
> そのPCの問題だと思うのですが、原因がまったく分かりません。
類似画像検索も含めて探してみましたが、似たような事例が見当たりませんね。
ざっくり思いつくところでは…
・何らかのリソース不足により表示できなくなっている。
・ダイアログの表示、あるいはシェル名前空間をカスタマイズするタイプの
ユーティリティソフトウェアや、セキュリティソフトが入っており、
それが今回の問題を引き起こしている。
・コモンダイアログを乗っ取るタイプのトロイの木馬に汚染されている。
・システムコンポーネントの一部が DLL Hell を引き起こしている。
■No31470に返信(eboさんの記事)
> 全て問題なく表示されたということです。
AutoUpgradeEnabled プロパティの設定は、
未指定 / true / false のいずれでしょうか?
今回の現象が、IFileDialog 関連の環境トラブルだとしたら、
上記を false にすれば解決するかも知れません。
旧形式の表示となるため、見た目と操作感が変わってしまいますが…。
> 1.画面を開いてコモンダイアログを開くボタンをクリックすると画像のようなコモンダイアログになる。
> 2.一度画面を閉じて、再度開いてボタンをクリックすると正常にコモンダイアログが表示される
> 3.再度画面を閉じて、また画面を開きボタンをクリックすると画像のようなコモンダイアログになり、キャンセルでコモンダイアログを閉じるとアプリが落ちる。
上記は再現しておりませんが、少々気になる点がありました。
Windows 7 のコモンダイアログは、アプリを終了しても、
前回起動時のダイアログサイズを覚えているようですが、
そのリサイズ動作についてです。
まずは、ダイアログサイズを一番小さいサイズで覚えさせてから、
下記のコードを起動してみました。
using (var ofd = new OpenFileDialog())
{
ofd.Title = "ホームページデータのCSVファイルを選択してください";
ofd.Filter = "CSVファイル(*.CSV)|*.CSV|すべてのファイル(*.*)|*.*";
ofd.FilterIndex = 0;
ofd.FileName = @"SAMPLE.TXT";
//ofd.InitialDirectory = "Shell:ProgramFiles";
ofd.InitialDirectory = @"C:\Program Files\";
ofd.ShowDialog();
}
上記のように、InitialDirectory プロパティを設定しておいた場合、
ほんの一瞬だけ、ebo さんの最初の画像とサイズのダイアログが最初に表示され、
それがリサイズされて、本来のサイズで表示されるという動作が発生しました。
しかし No31458 のように、InitialDirectory を取得も設定もしなかった場合や、
InitialDirectory に null や "" を代入した場合には、同現象は再現しません。
なお、エクスプローラーの [ツール]-[フォルダーオプション]の設定は
下記のようにしています。関係ないかもしれませんけど。
ナビゲーション ウィンドウ:
・すべてのフォルダーを表示する → OFF
・自動的に現在のフォルダーまで展開する → OFF
> 再度画面を閉じて、また画面を開き
デザイン時にダイアログをフォームに貼りつけ、それを使いまわす場合と、
利用するたびに「using (var ofd = new OpenFileDialog())」などで
生成と破棄を繰り返す場合とで、何か違いは生じますか?
> アプリが落ちる。
これは、アプリが無言で終了してしまうということでしょうか。
それとも、何かしらの致命的なエラー情報が、
画面あるいはイベントログなどに現れるのでしょうか。
どうしても解決できないようであれば、別の表示方法という事で、
IFileDialog インターフェイスを使うとか、
GetOpenFileNameW API で表示するなどといった、
アンマネージな表示方法を試してみては如何でしょう。
分類:[.NET]
特定のPCのみでコモンダイアログが正しく表示されません。
OpenFileDialogクラスを使った「ファイルを開く」ダイアログボックス、
SaveFileDialogクラスを使った「名前を付けて保存」ダイアログボックスが
添付画像のようになっています。
自分のPCやその特定のPC以外では問題なく表示されていますので、そのPCの問題だと思うのですが、原因がまったく分かりません。
同様の経験をされた方、あるいは原因をご存じの方がおられましたら、教えていただけないでしょうか。
よろしくお願い致します。
開発言語:VB2010
不具合が起きているPC:Windows 7 64bit版