| 2016/11/16(Wed) 15:05:59 編集(投稿者) 2016/11/16(Wed) 14:43:58 編集(投稿者) 2016/11/16(Wed) 13:51:46 編集(投稿者) 2016/11/16(Wed) 13:50:34 編集(投稿者) 2016/11/16(Wed) 13:43:55 編集(投稿者) 2016/11/16(Wed) 13:39:27 編集(投稿者) 2016/11/16(Wed) 13:36:45 編集(投稿者) 2016/11/16(Wed) 13:33:59 編集(投稿者)
> 環境はWindows7 桐10です。 > > やりたいことは、フォームを閉じると同時に開いている(別)表も閉じたいのです。 > > コマンドボタンで表を閉じることはできないのでしょうか。 > > イベント(一括処理)でもかまいません。
お馴染みの、cmdTestClick( ) で、"D:\V10\work\kesiteii.tbx" を探索するというものです。
コピペで動くと思いますよ。
なお、編集表を切り替えて、編集モードとフォームの有無を調べますので、Nullフォームでは実行できませんのでご注意ください。
(例)
手続き定義開始 cmdTestClick( ) 変数宣言 自動,文字列{ &targetTbxFileName, &フォームファイル名 } 変数宣言 自動,整数 { &表番号, &ハンドル, &編集状態, &フォーム形式番号 }
if ( #表ファイル名( &hwindow ) <> #u ) ** #表ファイル名( n ) ** 指定した表番号の表ファイル名を取り出します。
&targetTbxFileName = "D:\V10\work\kesiteii.tbx"
&表番号 = #表番号取得( &targetTbxFileName ) ** #表番号取得 ** ウィンドウハンドルまたは表ファイル名から、対応する表の表番号を取得します
確認 "&表番号 = " + #str( &表番号 )
&ハンドル = #cond( #ウィンドウハンドル( &表番号 ), &表番号, 1, 0 ) ** #ウィンドウハンドル ** ハンドル n のウィンドウが開かれていれば真(1)、開かれていなければ偽(0)を返します。 ** この関数は、一括処理またはイベントハンドラで使用できます。
確認 "&ハンドル = " + #str( &ハンドル ) if ( &ハンドル ) 編集表 &ハンドル /* #フォーム属性 を参照するために編集表を切り替える */
&編集状態 = #編集状態( &ハンドル ) ** #編集状態 ** 表番号 n で指定した表の更新状態を調べて、つぎの数値を返します。 ** 戻り値 説明 ** 0 更新中ではない。 ** 1 行訂正中である。 ** 2 行追加中である。 ** 3 行挿入中である。
確認 "&ハンドル = " + #str( &ハンドル ) + " &編集状態 = " + #str( #編集状態( &ハンドル ) )
&フォームファイル名 = #フォーム属性( 1 ) /* ワンタッチフォームの場合にはファイル名が無い */ ** #フォーム属性( n ) ** フォームの属性を取り出します。フォームを使用していない表で使用した場合は、どの属性も未定義値を返します。 ** n 戻り値 ** 1 フォームのファイル名を文字列で返します。
&フォーム形式番号 = #フォーム属性( 2 ) ** 2 フォームの形式を表わす番号を数値で返します。 ** 戻り値 意味 ** 1 表形式(桐 ver5 の帳票用) ** 2 伝票形式(桐 ver5 の帳票用) ** 3 タックシール形式(桐 ver5 の帳票用) ** 4 カード形式 ** 5 伝票形式 ** 7 一覧表形式
確認 "&ハンドル = " + #str( &ハンドル ) + " &編集状態 = " + #str( #編集状態( &ハンドル ) ) + " &フォーム形式番号 = " + #str( &フォーム形式番号 )
編集表 &hwindow /* 編集表を元に戻す ただし、Nullフォームだとエラーになります */
if ( &ハンドル )
if ( .not &フォーム形式番号 )
if ( .not &編集状態 )
確認 "表ウィンドウを閉じます" *ウィンドウ終了 &ハンドル else
確認 "表ウィンドウは編集中なので閉じられません" end
else
if ( .not &編集状態 )
確認 "フォームウィンドウを閉じます" *ウィンドウ終了 &ハンドル else
確認 "フォームウィンドウは編集中なので閉じられません" end end end
else
確認 "ハンドルが見つかりません" end
else
確認 "Nullフォームなので実行できません ※編集表を元に戻せませんのでこの機能は実行できません" end
手続き定義終了
<蛇足>
イベント処理でフォームウィンドウや表ウィンドウを対象にして、[フォーム終了]コマンドを実行するのは危険です。
もしも、対象の表ウィンドウが表示モードならばよいですが、
データを編集中、行を追加中などの編集モードだと編集中のデータを失います。
<重要>
試したところ、
現行の桐10( ビルド番号:#2214 )では、編集中のデータを失うだけではなく、桐10が死んでしまいます。
これは表ウィンドウの場合で、フォームウィンドウでは死なないようです。
桐9-2012 も同じようです。
桐ver.8 は編集中のデータを失うだけで死ななかったけどなぁ〜。
|