ユーザは、[OK]ボタンや[キャンセル]ボタンをクリックして、またはウィンドウの上隅にある赤色の[閉じる]ボタンをクリックしてウィンドウを閉じることができます。また、メッセージを送ってウィンドウを閉じることもできます On ValidateとOn Closeには、ウィンドウの操作時に行うことを指定します。
•
|
On Validateは、[OK]ボタンがクリックされると、式を評価します。他のボタンをクリックしたり、他の操作を行ったりしても式は評価されません。式の評価が真の場合、ウィンドウは閉じます。式の評価が偽の場合、ウィンドウは閉じません。[OK]ボタン用のスクリプトは、On Validateの式とは無関係に、[OK]ボタンがクリックされると必ず実行されます。
|
•
|
On Closeは、ウィンドウが閉じる直前に式を評価します。On Closeで戻される値は、On Validateの戻り値と同様に、ウィンドウを開いたままにする場合があります。しかし、On Closeを使う際の最良の方法は、常に1を戻すようにすることです。そうすれば、閉じないウィンドウを作成してしまうことがありません。
|
•
|
On Closeは、モーダルウィンドウと非モーダルウィンドウのどちらでも機能します。On Validateは、モーダルウィンドウでのみ機能します。
|
•
|
On Closeは[OK]と[キャンセル]を区別しないので、検証に使うことはできません。On Closeは、ウィンドウが閉じるときに必ず実行されるので、リソース(非表示のデータテーブルなど)の整理に利用できます。
|
•
|
On Validateをリソースの整理に利用しないでください。On Validateは、[キャンセル]ボタンまたは赤色の[閉じる]ボタンでは実行されないため、代わりにOn Closeを使うか、On Validateに加えてOn Closeを使うようにしてください。
|
ノンモーダルウィンドウであるレポートウィンドウがあり、整理する必要のあるリソースとして非表示のデータテーブルがあるとしましょう。On Closeスクリプトが、そのデータテーブルを閉じます。ユーザはデータテーブルが開いていることに気づかない場合が多く、たとえ気づいたとしても簡単に閉じる方法はないため、この方法はおすすめです。
dt = New Table( "無題", << Invisible,
New Column( "x", Set Values( [1, 2, 3, 4] ) ),
New Column( "y", Set Values( [4, 2, 3, 1] ) )
);
dt << Bivariate(
y( dt:y ), x( dt:x ), <<On Close( Close( dt, "nosave" ) )
);
スクリプトが実行される前、開いているデータテーブルはありません。「無題」という非表示のテーブルが作成され、ホームウィンドウのデータテーブルリストにあるスクリプトの上に表示されます。次にグラフが作成されます。レポートウィンドウを閉じると、On Closeによって非表示のテーブルが閉じられます。
win = New Window( "検証例",
<<Modal,
<<Return Result,
<<On Validate(
If( (!Is Missing( variablebox << Get ) & 40 <= variablebox << Get <= 50),
Return( 1 ), // そうでない場合は、ユーザが正しくない回答を入力した
tb << Set Text(
Match( Random Integer( 1, 3 ),
1, "本当にそう思いますか?",
2, "もう一度考えてみましょう。",
3, "質問を読んでください。"
)
);
Return( 0 );
)
),
Text Box( "私は40~ 50の数字のうち1つを思い浮かべました。当ててください。" ),
variablebox = Number Edit Box( .),
H List Box( Button Box( "OK" ), Button Box( "キャンセル" ) ),
tb = Text Box( "" )
);
New Window( "モーダルウィンドウ",
<<Modal,
Text Box(
If(
win["Button"] == -1, "調子のいいときにもう一度挑戦してください。",
// キャンセルボタンまたは赤色の閉じるボタンをクリックした場合
win["variablebox"] == 42, "よくできました!", // 42を入力した場合
"もう一度挑戦してください。" // 42以外の値を入力してOK をクリックした場合
)
)
);