Graphics    

クローズ要求関数

MATLABは、つぎの場合に必ず、FigureのCloseRequestFcnで定義されたコールバックルーチンを実行します。

クローズ要求関数によって、Figureの終了またはMATLABセッションの終了を妨げたり遅らせたりすることができます。これは、つぎのような動作を実行するのに役立ちます。

CloseRequestFcnに対するデフォルトのコールバックルーチンは、closereqと呼ばれるM-ファイルです。それには、つぎのステートメントが含まれています。

このコールバックは、RootのShowHiddenHandlesプロパティをonに設定することによってHandleVisibilityコントロールを無効にし、それによってすべてのFigureのハンドル番号が視覚可能となります。

MATLAB の終了

MATLABを終了すると、カレントFigureのCloseRequestFcnが呼び出され、Figureを削除すると、Rootの子オブジェクトのリスト(すなわち、RootのChildrenプロパティ)のつぎのFigureがカレントFigureとなり、そのCloseRequestFcnがつぎに実行されます。

Figureを削除しないようにFigureのCloseRequestFcnを変更する(たとえば、このプロパティを空文字列として定義する)と、そのFigureに対してclose コマンドを発行してもFigureは削除されません。さらに、MATLABを終了しようとしても、MATLABがFigureを削除しないためその終了は中止されます。

クローズ要求関数でのエラー

CloseRequestFcnの実行時にエラーが発生すると、MATLABは閉じる動作を中止します。しかし、CloseRequestFcnのエラーは、MATLABの終了を中断することはありません。もし、FigureのCloseRequestFcn でエラーが発生したとしても、MATLABはquitまたはexit コマンドに従って無条件にFigureを閉じます。

クローズ要求関数の変更

deleteコマンドは、そのCloseRequestFcnの値に関係なく、設定したFigureを常に削除します。たとえば、ステートメント

は、ハンドル番号が隠されていない(すなわち、HandleVisibilityプロパティがonに設定されている)すべてのFigureを削除します。ハンドル番号が隠されているかどうかに関係なくすべてのFigureを削除するためには、RootのShowHiddenHandlesプロパティをonに設定してください。その場合、RootのChildrenプロパティは、すべてのFigureのハンドル番号を含みます。たとえば、ステートメント

は、すべてのFigureを無条件に削除します。


 FigureとAxesの保護 ハンドルの有効性と可視性