4D-jp 4D Japan Technical Support Team

カット&ペーストした値が入力データに反映されない

2019-02-22

新規プロセスで実行したフォーム上でカット&ペーストなどの操作をするためには,プロセス(SET MENU BAR)またはフォーム(「連結メニューバー」プロパティ)のメニューバーで「編集」メニューがアクティブにされている必要があります。

メニューバーで「編集」メニューがアクティブにされていれば,フォーム上でカット&ペーストなどの操作ができるようになります。その場合,フォームオブジェクトのOn Data Changeイベントも実行されることになりますが,カットまたはペーストの直後ではなく,カットまたはペーストの直前にOn Data Changeが発生する点に注意してください。これは,メニューアクション全般に共通のルールとして「入力を確定してからアクションを実行する」という順序でデータが処理されるためです。

On Data Changeは,通常,キーストロークで入力が確定した直後に発生するイベントです。On Data Changeに入力値(変数やフィールド)を処理するようなコードが記述されている場合,カットまたはペーストで入力を完了したときにだけ「ひとつ前の」値が処理されることになってしまうので,特に注意が必要です。

コピー&ペースト操作をOn Data Changeイベントで通常のタイプ入力と同格に扱いたいのであれば,メニューエディターで編集アクションの「イベントを発生させない」オプションを有効にすることができます。そうすれば,コピー&ペースト操作だけではOn Data Changeが発生しなくなり,通常のタイプ入力と同じく,入力が確定したタイミングでOn Data Changeが発生するようになります。

デザインリファレンス > メニューとメニューバー > メニューアクションを指定する

ユーザーモードで表示される編集メニューは,「イベントを発生させない」オプションが有効にされていますが,メニューエディターで作成した編集メニューはオプションが有効にされていません。開発者は,フォームエディターかユーザーモードでフォームを検証することが多いので,コピー&ペースト操作でデータ入力を完了した場合にだけ問題が発生することに気づかないことがあります。On Data Changeに入力データを処理するコードが記述されているのであれば,念のため,メニューエディターで編集アクションの「イベントを発生させない」オプションが有効にされているかどうか,確認しておくと良いでしょう。


リンク