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


28

別のダイアログボックスを開いたままドキュメントを閉じようとすると、Wordが表示するエラーがときどき表示されますが、その理由を理解することができませんでした。


6
一般的な問題は、メインウィンドウでの操作に応じて、ダイアログ内のものが有効、無効、または適用できなくなる可能性があることです。暫定。(これは、「フィードバックループがシステムに問題を引き起こす可能性がある」というより一般的な原則の単なる別の現れだと思います。)
Mehrdad

タスクマネージャーを起動して、プロセスを強制終了するように指示すると、彼らはできます。=)しかし、これには予想外の副作用があるかもしれません。(ファイルが破損する可能性のあるまれな例がありますが、非常にまれであると確信しています。予期しないクラッシュや停電のために設計する必要があります。)
jpmc26

回答:


61

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


4
しかし、ダイアログがモーダルである場合、OPはプログラムにどのように閉じるよう指示しましたか?ここで何か他のことが起こっているのでしょうか?
Monica

7
@LightnessRacesinOrbitプログラムを閉じるには多くの方法がありますが、すべての方法でメインウィンドウをクリックする必要はありません。たとえば、タスクバーエントリを右クリックして[閉じる]を選択するか、Ctrl-Shift-Escでタスクマネージャーを引き上げて、そこから閉じようとします。Windowsをシャットダウンすると、最初はアプリケーションを正常に閉じようとしますが、タイムアウト後にアプリケーションを「強制終了」することもあります。これらは、実際にフォーカスを持たずに閉じるようにプログラムに信号を送信します。したがって、ボブのスクリーンショットは「OKをクリックして、Wordに切り替えます」という順序で表示されます。
IMSoP

@IMSoP:アプリケーションを閉じるように依頼する「エンジニアリング」の方法が他にもあることは承知していますが、OPが正確に何を指定するかを期待していたので、「一般的な使用」が終了すると思う線を心の中で描きました「一般的な使用法」を超えていれば、彼らはやっていた。
モニカとの軽さレース

11
@LightnessRacesinOrbit私はあなたにタスクマネージャがより「専門家」の方法であることを認めますが、人々がタスクバーから何かを閉じるのが完全に普通だと思ったとしても全く驚かないでしょう。実際、右クリックする必要はありません。グループにカーソルを合わせるか、小さなサムネイルを表示すると、赤い[x]ボタンが表示されます。異なることは異なる人々にとって明らかであるように思われます。
IMSoP

@IMSoP:それは本当です。
モニカとライトネスレース

20

ダイアログボックスに次のようなメッセージが表示される場合があります。

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

ここには明らかな正しい答えはありません。誤ってドキュメントを破損した可能性があります(たとえば、猫がキーボード上を歩いた)場合、答えは「いいえ」です。

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


8
質問はこのエラーに関するものであると確信しています。
ボブ

12
わかりましたが、質問では特定のダイアログボックスについて言及していませんでした。私はプログラマーです。モーダルダイアログボックスとは何かを理解していますが、なぜ発生するのという質問に答えようとしました。
ニックギャモン

私見では、プログラマーではない人がプログラムを使用することに注意してください。
ローレンス

1

プログラムはこのように設計されているため、アクションを回避するために、ユーザーは望ましくない場合があります。

通常、プログラムでユーザーが何らかのアクションをガイドする必要がある場合、ダイアログボックスが表示されます。保存されていないドキュメントを閉じることは、優れた例です。ダイアログでは、変更を保存するか、変更を破棄するか、閉じることを中止して編集に戻ることができます。プログラムは、この質問に答えずに意図的にクローズすることを拒否します。クローズすると、いくつかのアクションが強制されるためです。プログラムは、例えば、それ自身で決定することはできません。最近の編集を破棄するか、反対に、キーボード入力で正しいバージョンを上書きします。

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

また、作成者はすべての機能を「安全な方法」で作成する必要がないため、プログラムの設計も簡素化されます。

今日、ほとんどのダイアログは技術的な意味ではモーダルではありません(プログラムが責任を負います)が、プログラムのロジックフローのより広い意味でモーダルにする方が簡単です。


0

誤解される可能性がありますが、これは古いコモンダイアログコントロールの動作に戻っていると思われます。

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

なぜそれがまだそうなのか、人々はそれに慣れ、何十年もその仮定でプログラムされた開発者、そしてより重要なことに非プログラマーはオフィスオートメーションスクリプトでそれらのダイアログを使用し、Microsoftは目標との後方互換性を厳密に順守していません。


0

カーテンの後ろで、プログラム(この場合はMS Word)は、ウィンドウの作成時に「Xボタンクリックイベントハンドラー」を作成します。ダイアログウィンドウがある場合、Wordはそれを記録します。次に、Xボタンハンドラーで、Xボタンがクリックされると、記録された開いているダイアログウィンドウをチェックします。ある場合、ハンドラーはクローズ操作を中止します。存在しない場合は、プログラムを終了し、OSはプログラムが使用したメモリをクリーンアップします。これがその仕組みです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.