入力フィールドに数字を入力し、フォーカスアウト(次の入力フォームに移るなど)したら数字の左側をゼロ埋めしたいのです!
悩みながらも共通パーツとして使いやすく作れました♪記録に残しておきますの♪
ポイント
Get (アクティブフィールド内容 )
で入力フォームの値を引数としてでなくスクリプトで直接取得フィールドを名前で設定 []
で動的にフィールドを指定可能- フィールドを指定するには
Get (アクティブフィールドテーブル名 ) & "::" & Get (アクティブフィールド名 )
スクリプトのコード
################################################## # アクティブフィールド文字列の左側を0埋めします。 # (50 + 対象文字列)桁まで対応します。 # 引数: 総桁数 # 戻り値: 0埋めした文字列 ################################################## エラー処理 [オン] ウインドウの固定 変数を設定 [$input; 値: Get (アクティブフィールド内容 )] 変数を設定 [digits; 値: Get (スクリプト引数 )] 変数を設定 [$formatted: 値: Right ( "00000000000000000000000000000000000000000000000000" & $input ; $digits)] 変数を設定 [$output; 値: Get (アクティブフィールドテーブル名 ) & "::" & Get (アクティブフィールド名 )] フィールドを名前で設定 [$output; $formatted] エラー処理 [オフ]
トリガの設定方法
- レイアウトの編集 > 対象のフォーム右クリック > スクリプトトリガ設定
- イベント OnObjectExit にチェックし、スクリプトに「左0埋め」、オプションのスクリプト引数に総桁数を設定
おわりに
最初、「現在のスクリプト終了」で値をフォームに返せると思っておりましたけれども、できませんでした><。
スクリプトでオカレンステーブルのフィールドを設定してやれば反映できることはわかっておりました。けれどもそれですと設定したいレイアウトのフィールドの数だけコードを書かなければなりません。極めて面倒、極めて保守性が低いですの><。
絶望しておりましたら、「フィールドを名前で設定」で値を反映するフィールドを動的に選べることがわかりました♪感動しましたの!
さらに、「アクティブフィールド内容」で OnObjectExit 時のフィールドの値を取得することができることも知れました!これで引数としてフィールドを渡す必要も無くなりましたの♪これも嬉しかったですわ♪
以上です。