過去の桐井戸端BBS (桐ver.9)
24243 イベントでフォームのテキストオブジェクトで入力した値を変数に設定したい もさく 2004/01/11-11:51
フォームのテキストオブジェクト"t_明細"に入力した後に"&明細"に入力済みの値を設定するイベント書式を教えて下さい。
(変数宣言済)
24245 Re:入力値を変数に設定 佐田 守弘 2004/01/11-12:26
記事番号24243へのコメント
もさくさん
テキストオブジェクト「t_明細」の入力後イベントをダブルクリックして、イベントハンドラを生成させます。
生成したイベントハンドラの中(手続き定義開始〜手続き定義終了の間の行)に、
以下のコマンドを記述して下さい。

代入 &明細=[明細]

●イベントの書式と書かれていますが
イベントハンドラの先頭行である「手続き定義開始」コマンドの後ろのパラメータについては、
とりあえずは何も考える必要がありません。

動作するイベントハンドラを作るには、該当するイベント名をダブルクリックして、
対応するイベントハンドラを自動で生成させる事が必要です。ですから、書式を教えても意味がありません。

この部分を手作業で記述したり、あるいは人から教えて貰ったイベントハンドラを単にコピーしても
まず動作しないと思って下さい(ベテランであれば絶対に不可能ではないが)。
<理由>
手続き定義開始コマンドの後ろのパラメータを、記憶に頼って正確に記述する事は、まず難しい。
正確なイベントハンドラを作っても、イベントを有効にするチェックを設定しないと、動作しない。
です。

佐田守弘(KS-00119)
24248 Re:入力値を変数に設定 もさく 2004/01/11-20:26
記事番号24245へのコメント
佐田 守弘さん

有難うございます。
おっしゃることは判りました。
ただ私は不勉強で自分の期待することに対してどのイベント名を選択すればよいか判らないときが有ります。
皆さんに教えて頂いたものを参考に名前通り模索(模作)しているのが現状です。
その辺はさておき、教えて頂いたようにイベントを書き実行してみました。
入力が終わった時点で処理を一括処理に移し変数をチェックしたところ反映されていません。
そこで、試しに入力終了後、もう一度入力した項目をクリックした後同じように変数チェックしたところ、
変数に反映されました。どこがまずいのでしょうか。よろしくお願いします。

24249 Re:入力値を変数に設定 bonito 2004/01/11-21:01
記事番号24248へのコメント
もさくさん

[ソース値更新]イベント内でやってみてはどうですか?

>■イベントの発生
>[ソース値更新]イベントは、ソースの値が会話処理で更新されたときに
>発生するイベントです。
>[入力後]イベントは、このイベントの前に発生します。

つまり(判りにくいが)[入力後]イベント発生時にはまだソースの更新は行われていない...ようです (^^;

強いて[入力後]イベントを使うなら
>代入 &明細=[明細]
ではなくて
::入力後(参照 文字列 &編集文字列,長整数 &モード,参照 長整数 &入力継続)
とあるところの
代入 &明細=&編集文字列
でしょう...でも何か美しくないかなぁ〜

ところで[入力後]イベントの&モードは[Esc]キーが押されたりして中止した場合のみならず[Enter]が押されて確定しても
値が変更されていない時には0が入りますね(これは使える)
フォーカスの移動も更新モードの変更も出来ない[入力後]イベントって
余り使う機会がなくて、ほとんど[ソース値更新]イベントなもんで、
今日別の事をやっていて初めて知ったのでした (^^;
24251 Re:入力値を変数に設定 佐田 守弘 2004/01/11-22:15
記事番号24249へのコメント
もさくさん
bonitoさんの私的通りで、このイベントはソース値更新イベントを使うのが正解で、
入力後イベントでは不適切でした。訂正します。

「入力後に」の言葉にうっかりつられてしまいました。
bonitoさんも書かれておりますが、入力後イベントとは、テキストボックスでの
入力のエディタ機能が終了した時点で発生します。この後、エディタから引渡された値が
表に書き込まれますが、書き込み終わった時に、ソース値更新イベントが発生します。

ですから、ソース値更新イベントで行わないと目的を達しません。

佐田守弘(KS-00119)
24254 Re:入力値を変数に設定 もさく 2004/01/12-09:12
記事番号24251へのコメント
佐田 守弘様
bonito様
有難うございました。"ソース値更新"で期待通りゆきました。一部分ずつ牛歩ですすめ
ています。暗中模索(模作−もさく)です、またよろしくおねがいします。

24270 Re:入力値を変数に設定 アックン(=^・^=) 2004/01/14-12:22
記事番号24251へのコメント
佐田さん、bonitoさん>
ぼくはずっと入力後イベントでやってますよ。
以下に実際に使用しているケースを抜粋します。
なお、過去に同様の質問に何度か回答したと思うのですが、過去ログ検索してないので
詳細不明記憶曖昧であります。(^^;

proc t借方金額::入力後(参照 文字列 &編集文字列,長整数 &モード,参照 長整数
&入力継続)
 if( &モード=1 )
   &編集文字列 = #str( #num( &編集文字列 ) ) /* コンマを削除してます */
   if( #mod( #num( &編集文字列 ) , 1 )>0 )
     メッセージボックス "・・・" , "借方金額を 整数 にしてください。" ,\
               アイコン = i
     &入力継続 = 1 /* 意に添わない値なので、入力をやり直させます。*/
   else if( &編集文字列="0" )
     メッセージボックス "・・・" , "借方金額が 0 です。" , アイコン = i
     &入力継続 = 1
   else if( &編集文字列 )
     &str[3] = &編集文字列 /* 値をチェック後、ここで変数に代入してます。*/
   else
     &str[3] = ""
   end
 end
end
-------------------

戻る