| 2024/10/26(Sat) 10:05:27 編集(投稿者)
ジェダイの桐さん
> 普通の場合には、何かやらかす(乱暴な言い方で失礼)と、変数をソースとしたテキストボックスも、 > 再描画(リドロー)されます。 > ところが、この再描画(リドロー)がサボられるケースがあるんですよ。 > よく考えてみてください!。 > コマンドを実行する度に、フォームの画面を再描画(リドロー)していたら、とても能率が悪いですよね。 > それこそ、通信速度が遅いネットの動画のようになってしまいます。※これ重要です! > だから、再描画(リドロー)のタイミングは、コマンドを実行する度ではなくて、[手続きがの流れ]が終了した時になるのが普通です。 > しかし、桐システムが再描画(リドロー)する必要を感じないケースもあるのですよ。※忘れたのではなく、必要を感じていないからです > webブラウザも同じでしょう。キャッシュばかり表示していて、なかなかリドローしてくれないですよね。(^^ゞ > だから、強制的に再描画(リドロー)したい場合には、変数変更()というメソッドを使うわけです。
普通は、フォームオブジェクトの[変数変更]メソッドを実行する必要はないのです。
しかし、本作例では、ステルスの表をこっそり検索して、局所変数の書き換えているので、 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・
フォームオブジェクトの[変数変更]メソッドが必要になったのです。
実は最初は[変数変更]メソッドは書いていなかったのですよ。
でも、実行すると変数の値が書き換わっても、フォームではそれが反映されないことに気が付いたのです。
そこで、
メソッド呼び出し @フォーム.変数変更() /* ソースが変数のテキストボックス( txtNotice 等)をリドロー(再描画)します */
という1行を付け加えたのです。
このように、普通にプログラムをテストしていく時に気が付くことなるので、 ・・・・・・・・・・・・・・・・・・・・・・・・・・
先回りして[変数変更]メソッドを記述する必要ないのでした。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・
世の中には、気になって仕方ないので、意味も無く[変数変更]メソッド等を書く人が居ます。 ・・・・・・・・・・・・・・・・・・・・・・・・
しかし、効果が見込めない所で、無意味なメソッドを実行するのは、とても恰好悪いことだと思いませんか??? ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
このように、無意味なメソッド連発して記述するのは、単に気休めのための「おまじない」と同じです。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
意味のないメソッドは書かないようにしてください。 ・・・・・・・・・・・・・・・・・・・・・・・
<作例>
手続き定義開始 txt出荷準備日::ソース値更新() 変数宣言 自動, 文字列{ &icon, &title = "txt出荷準備日::ソース値更新( )", &msg } 変数宣言 自動, 文字列{ &string } 変数宣言 自動, 長整数{ &pcs } 変数宣言 自動, 整数 { &error }
&msg = "このメッセージボックスはテスト(デバッグ)用です" &msg = &msg + "\n\n正しくプログラムが動作していることを確認したら、コメントアウトしてください" &msg = &msg + "\n\n&mIsString入力前 = " + #str( &mIsString入力前 ) &msg = &msg + "\n\n&m編集文字列入力前 = " + &m編集文字列入力前 &msg = &msg + "\n\n&mIsString入力後 = " + #str( &mIsString入力後 ) &msg = &msg + "\n\n&m編集文字列入力後 = " + &m編集文字列入力後 &icon = "i" 手続き実行 INFprcMsgPause( &icon, &title, &msg )
┌if ( &mOpenStatus在庫表 = 1 ) │ │ &string = [商品名] │┌if ( &mIsString入力後 ) ││ &pcs = [受注数] * -1 │├else ││ &pcs = [受注数] │└end │ トレース出力 _&title, " ", _&string, " ", _&pcs │ │ 手続き実行 prcTblSeekAndUpdate( &mTblNum在庫表, &string, &pcs, &error ) │ └end
手続き定義終了
手続き定義開始 prcTblSeekAndUpdate( 整数 &tblNum, 文字列 &string, 長整数 &pcs, 参照 整数 &error ) 変数宣言 自動, 文字列{ &icon, &title = "prcTblSeekAndUpdate( )", &msg } 変数宣言 自動, 文字列{ &expression } 変数宣言 自動, 文字列{ &stringPcs } 変数宣言 自動,文字列{ &WQ = #jis( #hex("22") ) } /* 半角の二重引用符 */ 変数宣言 自動, 整数 { &status }
&error = 1 /* 参照渡しの引数の初期化 */
トレース出力 _&tblNum, " ", _&string
&expression = &WQ + #文字置換( #文字置換( &string, &WQ, &WQ + &WQ ), #全角( &WQ ), #全角( &WQ + &WQ ) ) + &WQ /* &string に含まれるかもしれない二重引用符の処理 */ トレース出力 _&string, " ", _&expression
編集表 &tblNum 解除 * 検索 [商品名]_&expression
トレース出力 _( .not #eof ) ┌if ( .not #eof ) │ │ トレース出力 _&title, " ", _[在庫数], " ", _&pcs │ │ &stringPcs = #str( [在庫数] ) │ 行訂正 終了状態 = &status, [在庫数] = [在庫数] + &pcs │ ** 戻り値 説明 │ ** 1 終了した │ ** 0 共有違反以外のエラーが発生した │ **-2 他の利用者が、置換や併合などの処理を実行中(ファイル排他) │ **-3 他の利用者がロックした行がある(レコード排他) │ **-4 他の利用者がすでに削除している(行削除) │ トレース出力 _&title, " ", _[在庫数], " ", _&pcs │ │┌if ( &status = 1 ) ││ ││ &error = 0 ││ **&mNotice = "在庫表.tbx の[商品名]: " + [商品名] + " の在庫数は " + #str( [在庫数] ) + " です" ││ &mNotice = "在庫表.tbx の[商品名]: " + [商品名] + " の在庫数は " + &stringPcs + " ⇒ " + #str( [在庫数] ) + " に変更されました" ││ メソッド呼び出し @フォーム.変数変更() /* ソースが変数のテキストボックス( txtNotice 等)をリドロー(再描画)します */ │├else ││ ││ &msg = "コマンドの実行に失敗しました" ││ &msg = &msg + "\n\n⇒ 行訂正 終了状態 = &status, [在庫数] = [在庫数] + &pcs" ││ &msg = &msg + "\n\n&status = " + #str( &status ) ││ &icon = "e" ││ 手続き実行 INFprcMsgPause( &icon, &title, &msg ) │└end │ ├else │ │ ** nop: no operation └end
手続き定義終了
|