web-dev-qa-db-ja.com

ダイアログボックスが開いているのにMicrosoft Wordを閉じることができないのはなぜですか。

別のダイアログボックスを開いた状態で文書を閉じようとするとWordでエラーが表示されることがありますが、なぜそれが発生するのかわかりませんでした

27
John

ほとんどのダイアログボックスは " modal "と見なされるため、ダイアログ自体が閉じられるまで、コントロールはメインプログラムまたは呼び出し元のコンテナに渡されません。これは仕様によるもので、プログラマーはウィンドウをモーダルまたは非モーダルにすることができます。通常、ウィンドウは、開かれたダイアログが選択(Ok)または中止(Cancel)のいずれかで処理されるまでメインプログラムが続行できない場合、または続行しない場合はモーダルと定義されます。

60
Bill Hileman

ダイアログボックスは、次のように言っている可能性があります。

文書に変更を加えました。保存しますか? (はい・いいえ)

ここには明白な正しい答えはありません。誤って文書を破損した可能性があり(たとえば、猫がキーボードの上を歩いた)、答えが「いいえ」である場合や、変更を入力するのに何時間も費やした場合があります。

Wordにとって最も安全なことは、質問に答えるまで閉じるのを拒否することです。

20
Nick Gammon

プログラムはこのように設計されているので、ユーザーが望んでいないかもしれない行動をとるのを避けるために。

通常、プログラムでユーザーが何らかの操作を指示する必要がある場合は、ダイアログボックスが表示されます。保存されていない文書を閉じるのは良い例です。変更を保存したり、変更を破棄したり、閉じるのをやめて編集に戻るためのダイアログが表示されます。終了すると強制的に何らかの行動が取られるため、プログラムは意図的にこの質問に答えることなく終了することを拒否します。プログラムは自分自身で決めることはできません。最近の編集を破棄するか、反対に、キーボードで入力したキーボードで正しいバージョンを上書きします。

閉じることに関係のないダイアログを考えても、通常は何らかのプロセスが進行中で、まだ完了していないことを意味します。ユーザーはどちらの方法を選択する必要があります。中止はユーザーが意図していない可能性があるアクションでもあるため、「単純に中止する」ことはできません。

作成者がすべての関数から「安全な回避策」を作成する必要がないため、プログラムの設計も単純化されます。

今日、ほとんどのダイアログは技術的な意味ではモーダルではありません(プログラムは責任を持ち続けます)が、プログラムの論理的な流れの広い意味でモーダルにするのはまだ簡単です。

1
Agent_L

私は間違っているかもしれませんが、これは古いコモンダイアログコントロールの振る舞いに戻ると思います。

帰らずに突然殺された人の中には、時には今死んでいるプログラムの外でさえも不快な副作用があり、ユーザー入力を必要とするシステムレベルで何かをしているなら、すべての場合に丁寧に逃げる方法がありませんでした。

それでもその理由は、人々はそれに慣れ、何十年もの間その仮定をプログラムした開発者そしてより重要なことに彼らのオフィスオートメーションスクリプトでそれらのダイアログを使ったマイクロソフトは目標後方互換性に厳密に従わなければならない。

0
Bill

裏側では、プログラム(私たちの場合はMS Word)がウィンドウを作成するときに「Xボタンクリックイベントハンドラ」を作成します。ダイアログウィンドウがあるとき、Wordはそれを記録します。次に、Xボタンハンドラで、Xボタンがクリックされたときに、記録されている開いているダイアログウィンドウをチェックします。いくつかある場合、ハンドラはクローズ操作を中止します。ない場合は、プログラムを終了し、OSはプログラムが使用しているメモリをクリーンアップします。これはどのように機能するかです。

0