Q169:現在時刻と指定時刻を比較して指定時刻が現在時刻を越えていた場合に指定したタクトタイムの間隔でイベントが発生するようタイマーを起動し、そのイベント発生に伴い数値を1ずつ加算し、数値入力フィールドに設定する。またその値が、指定数に達した場合にタイマーを停止すると言う動作を実現したい。
A169:
お送りいただいたアプリケーションを確認したところ、いくつか問題がございました。以下の点を修正しましたので、ご確認をお願い致します。
(1)タイマーは、イベント発生間隔を指定してから、起動してください。(乗算ID:37の処理完了イベントの処理)
(2)タイマー(ID:31)のアクションイベントのメソッドにイベント番号0設定してください。0を指定しない場合、タイマー起動時、終了時等にもイベントが発生します。
(3)数値入力フィールドに「数値を設定する(Object)」を使用して値を設定する場合、設定する値の型(今回は、BigInteger)と数値入力フィールドの数値型を一致させてください。数値入力フィールドの数値型は「実行(設定可)」で実行し、数値入力フィールド上でマウス右クリックし、メニューの「数値型」から適切な型(今回は、BigInteger)を選択してください。
これらが一致していないと、数値を設定しても正しく表示が行われない場合がございます。
「数値を設定する(Object)」ではなく「文字列を設定した後、その文字列で値を確定する(String)」は不整合があっても表示に問題が発生しないため、こちらのメソッドのほうが無難かもしれません。
(4)今回の処理では、等価演算で数値を判定してタイマーを停止しておりますが(サブルーチンID:47の箇所)、何らかの影響で数値が超えた場合を考慮し、比較演算を用いたほうが安全であるかもしれません。
備考:「タイマー」の「Q&A4」、「数値入力フィールド」の「Q&A13」にも掲載。