| 2016/09/20(Tue) 11:30:50 編集(投稿者) 2016/09/20(Tue) 11:28:39 編集(投稿者) 2016/09/20(Tue) 11:22:25 編集(投稿者)
> 桐では、フォームを閉じたり開いたり時のイベントにキャンセル機能がありませんので… > > Q1) > 今日分のデータを入力して、普通にフォームを閉じようとした時に、 > 「入力漏れがないかチェックして、漏れがあれば、その旨のメッセージを出して、フォームを閉じさせない」 > > Q2) > メニューフォームからでなく、いきなり個々のフォームを開こうとした時に、 > 「メニューフォームからスタートしてください、等々のメッセージを出して開かせない」 > > 皆さんは如何されていますか?
VB.NETでは、 [FormClosing]イベントハンドラで、e.Cancel = True でフォームを閉じなく出来る。
でも、これはあくまでもVB.NETの場合ですね。
桐の場合には、タイトルバーの[×]をクリックしたら、絶対にフォームは閉じてしまいます。
だから、タイトルバーの[×]をクリックしたら[フォーム終了]イベントが発現して、イベントハンドラが呼び出されます。
ちなみに、[フォーム終了]イベントは結構BUGを拾いやすいイベントなので、なるべく何もしない方が得策ですよ。
だから、[フォーム終了]イベントハンドラでメッセージなんか出しても手遅れで、本当に無駄です。
お前はすでに、終了している状態です。アチョー。
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇
男らしく、タイトルバーの[×]がクリックされた時にはあきらめましょう。
クドクド考えても時間の無駄です。
ちなみに、タイトルバーを非表示にしちゃえとか、[×]を強引に無効化しちゃえと考える人もいるが、
それでは、Windows らしくなくなって不自然きわまりないフォームになってしまいますね。
些細なことより、大局を大事にしましょう。
> 「入力漏れがないかチェックして、漏れがあれば、その旨のメッセージを出して、フォームを閉じさせない」
コマンドボタンを作れば済むことだと思います。
例えば、
オブジェクト名:cmd閉じる 標題 :閉じる
機能名 機能パラメータリスト [1]表示 [2]手続き実行 cmd閉じるClick ※cmd閉じるClick は さらにprc入力漏れチェック( &isError ) を呼び出している [3]なし [4]なし
手続き定義開始 cmd閉じるClick( ) 変数宣言 自動,整数{ &isError }
手続き実行 prc入力漏れチェック( &isError )
if ( .not &isError )
メソッド呼び出し @cmd本当に閉じる.実行( )
else
** エラーなので何もしない
end
手続き定義終了
以下のオブジェクトは、ワークスペースに配置する。
オブジェクト名:cmd本当に閉じる 標題 :cmd本当に閉じる
機能名 機能パラメータリスト [1]表示 [2]閉じる [3]なし [4]なし
なお、メソッド呼び出し @cmd本当に閉じる.実行( ) の代わりに、実行条件 ( 式 ) を利用しても同じです。
prc入力漏れチェック( ) で、式の真偽を操作すればOKです。
オブジェクト名:cmd閉じる 標題 :閉じる
機能名 機能パラメータリスト [1]表示 [2]手続き実行 cmd閉じるClick ※cmd閉じるClick は さらにprc入力漏れチェック( &isError ) を呼び出している [3]実行条件 ( 式 ) [4]閉じる
> Q2) > メニューフォームからでなく、いきなり個々のフォームを開こうとした時に、 > 「メニューフォームからスタートしてください、等々のメッセージを出して開かせない」
いきなり適当にフォームを開かれても、こっちにも都合があって、順番があるんだからぁ〜。
というケースですね。
まず、開かれちゃったら仕方がないから、フォームが開いて表示された後のことを考えましょ。
こういう場合は、[開始時]実行コマンドボタンを使うといいですよ。
例えば、
オブジェクト名:cmdStartup 標題 :cmdStartup
機能名 機能パラメータリスト [1]表示 [2]手続き実行 cmdStartupClick ※cmdStartupClick は さらにprcオープンチェック( &isError ) を呼び出している [3]なし [4]なし
手続き定義開始 cmdStartupClick( ) 変数宣言 自動,整数{ &isError }
手続き実行 prcオープンチェック( &isError )
if ( .not &isError )
** ノーエラーなので何もしない
else
メソッド呼び出し @cmd本当に閉じる.実行( )
end
手続き定義終了
または、メソッド呼び出し @cmd本当に閉じる.実行( ) の代わりに、実行条件 ( 式 ) を利用しても同じです。
オブジェクト名:cmdStartup 標題 :cmdStartup
機能名 機能パラメータリスト [1]表示 [2]手続き実行 cmd閉じるClick ※cmdStartupClick は さらにprcオープンチェック( &isError ) を呼び出している [3]実行条件 ( 式 ) [4]閉じる
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇
prcオープンチェック( &isError ) で何をチェックするかは、フォームの作者次第です。
ちなみに、[開始時]実行コマンドボタンが実行される前に、[フォーム開始]イベントが発現するので、
[フォーム開始]イベントが走って欲しくない場合には、[名札 メイン]で、[フォーム開始]イベントをオフにする必要もあります。
|