Curlでリッチプログラミング このページをアンテナに追加 RSSフィード

2007-03-23

[]Dialogの閉じる制御 01:28

ViewはWindowCloseイベントをconsumeすればウィンドウを閉じさせないようにできるけれど、Dialogは同じことができないんだよなぁ。モーダルウィンドウはDialogでしか実現できないから、つまりモーダルダイアログの×ボタンは制御はできないとゆうことで、困った。。と思いつつDialog.showのAPIリファレンスを眺めていたら以下の説明が。

ダイアログが閉じられるのを防ぐため、ダイアログに送られる WindowClose イベントを消費することができます。

え?できたっけ?(・ω・;)

すぐに簡単なテストコードを書いて確認。

閉じなかった場合のことを考えてちゃんとclose用のCommandButtonも用意。

{{Dialog
     {CommandButton
         {on Action at cb:CommandButton do
             {cb.dialog.close Dialog.ok}
         }
     },
     {on e:WindowClose do
         {e.consume}
     }
}.show}

あ、ほんとに閉じない!

バージョン5.0から変わってたんだ。知らなかった><

前までこれできなかったもんなぁ。。と思って4.0のヘルプも確認すると、そこには同じ説明文が。

ダイアログが閉じられるのを防ぐため、ダイアログに送られる WindowClose イベントを消費することができます。

なるほど。。

僕は3.0の記憶を今日の今日までずっと引きずっていたらしい。。

ちなみに3.0までは本当にDialogのWindowCloseは制御できませんでした。以下は3.0のDialog.showのAPIリファレンスの説明文(一部抜粋)

WindowClose イベントは通知を行うだけで、ドキュメント表示ボタンの再有効化などのために存在します。ダイアログが閉じられるのを防ぐ目的でこのイベントを消費することはできません。

動作変わったなら教えてよ。。

トラックバック - http://d.hatena.ne.jp/giuseppe/20070323