HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

ツリー一括表示

Nomal 期間絞込でのエラー時対応について /ジェダイの桐 (24/05/20(Mon) 09:54) #14350
Nomal Re[1]: 期間絞込でのエラー時対応について /まさやん (24/05/20(Mon) 11:46) #14351
│└Nomal Re[2]: 期間絞込でのエラー時対応について /ジェダイの桐 (24/05/20(Mon) 17:39) #14353 解決済み!
Nomal Re[1]: 期間絞込でのエラー時対応について /AK (24/05/20(Mon) 15:33) #14352
│├Nomal Re[2]: 期間絞込でのエラー時対応について /ジェダイの桐 (24/05/20(Mon) 17:48) #14354
│└Nomal Re[2]: 期間絞込でのエラー時対応について /まさやん (24/05/20(Mon) 19:39) #14356
│  └Nomal Re[3]: 期間絞込でのエラー時対応について /AK (24/05/20(Mon) 19:36) #14355
│    └Nomal Re[4]: 期間絞込でのエラー時対応について /ジェダイの桐 (24/05/21(Tue) 14:50) #14360
│      └Nomal Re[5]: 期間絞込でのエラー時対応について /ONnoji (24/05/21(Tue) 15:21) #14362
│        └Nomal Re[6]: 期間絞込でのエラー時対応について /ジェダイの桐 (24/05/23(Thu) 17:27) #14382
│          └Nomal Re[7]: 期間絞込でのエラー時対応について /ONnoji (24/05/23(Thu) 17:31) #14383
Nomal Re[1]: 期間絞込でのエラー時対応について /ONnoji (24/05/20(Mon) 23:34) #14358
│└Nomal Re[2]: 期間絞込でのエラー時対応について /ジェダイの桐 (24/05/21(Tue) 14:58) #14361
Nomal Re[1]: 期間絞込でのエラー時対応について /ONnoji (24/05/21(Tue) 18:47) #14363
  ├Nomal Re[2]: 期間絞込でのエラー時対応について /AK (24/05/21(Tue) 19:12) #14364
  └Nomal Re[2]: モジュール化はフォームのレベル.. /ONnoji (24/05/21(Tue) 19:15) #14365
    ├Nomal Re[3]: モジュール化はフォームのレベル.. /ONnoji (24/05/22(Wed) 10:52) #14366
    └Nomal Re[3]: モジュール化はフォームのレベル.. /ジェダイの桐 (24/05/22(Wed) 16:28) #14367
      └Nomal Re[4]: モジュール化はフォームのレベル.. /ONnoji (24/05/22(Wed) 16:34) #14368
        └Nomal Re[5]: モジュール化はフォームのレベル.. /ONnoji (24/05/22(Wed) 16:48) #14369 1716386255.jpg/65KB
          └Nomal Re[6]: モジュール化はフォームのレベル.. /ジェダイの桐 (24/05/22(Wed) 17:12) #14370
            ├Nomal Re[7]: モジュール化はフォームのレベル.. /ONnoji (24/05/22(Wed) 17:26) #14371
            │└Nomal Re[8]: モジュール化はフォームのレベル.. /ジェダイの桐 (24/05/23(Thu) 13:53) #14376 解決済み!
            │  ├Nomal Re[9]: モジュール化はフォームのレベル.. /ONnoji (24/05/23(Thu) 16:26) #14380
            │  ├Nomal Re[9]: モジュール化はフォームのレベル.. /AK (24/05/23(Thu) 17:15) #14381
            │  │└Nomal Re[10]: モジュール化はフォームのレベル.. /ジェダイの桐 (24/05/24(Fri) 09:37) #14386
            │  │  └Nomal Re[11]: モジュール化はフォームのレベル.. /ななーし (24/05/28(Tue) 16:08) #14407
            │  └Nomal Re[9]: モジュール化はフォームのレベル.. /まさやん (24/05/23(Thu) 20:28) #14384
            ├Nomal Re[7]: モジュール化はフォームのレベル.. /ONnoji (24/05/22(Wed) 23:34) #14373 1716388486.jpg/73KB
            └Nomal Re[7]: モジュール化はフォームのレベル.. /ONnoji (24/05/23(Thu) 22:57) #14385
              └Nomal Re[8]: モジュール化はフォームのレベル.. /ジェダイの桐 (24/05/24(Fri) 10:12) #14387
                └Nomal Re[9]: モジュール化はフォームのレベル.. /ONnoji (24/05/26(Sun) 16:15) #14393


親記事 / ▼[ 14351 ] ▼[ 14352 ] ▼[ 14358 ] ▼[ 14363 ]
■14350 / 親階層)  期間絞込でのエラー時対応について
□投稿者/ ジェダイの桐 -(2024/05/20(Mon) 09:54:05)
    2024/05/20(Mon) 17:48:46 編集(投稿者)

    桐10s Windows10を使用しています。


    日付絞り込み.TBXの項目名 日付 には ランダムに24/4/1〜24/4/30まで入力されいます。


    日付絞り込み.WFX から コマンドボタンで 期間指定絞込.WFXをモーダルフォームで開き、
    絞り込み開始日 と 絞り込み終了日 を入力して 日付絞り込み.WFXの日付を絞り込みたいと考えています。


    名札 メイン
     変数宣言 局所, 日時 { &mRefinementStartDate, &mRefinementEndDate }

     表 "日付絞り込み.TBX"
     &mRefinementStartDate = [日付]
     &mRefinementEndDate = [日付]


    手続き定義開始 cmd絞込開始Click()
     変数宣言 自動, 数値  { &ans }
     変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }

     表 "日付絞り込み.TBX"
     解除 *
     if( .not #eof )
      &msg = "絞り込み開始日 と 絞り込み終了日 が選択されました。"
      &msg = &msg + "\n日付 " + #文字列( &mRefinementStartDate ) + " 〜 " + #文字列( &mRefinementEndDate ) + "を絞り込みますか?"
      メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &ans

      if( &ans = 1 )
      絞り込み [日付] { &mRefinementStartDate<=[]<=&mRefinementEndDate }
      &msg = "絞り込み完了しました"
      メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
      メソッド呼び出し 戻り値= &実行リターン, @cmd閉じる. 実行()
      else
      &msg = "キャンセルしました"
      メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
      end

     else
     &msg = "該当日が見当たりません"
      メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
     end

    手続き定義終了


    この手続きですと、絞り込み開始日 と 絞り込み終了日 が正しく入力出来ていれば思った通りの動きになります。

    しかし、 24/4/1 〜 24/3/1 の様に間違えた入力でも絞り込めてしまいます。
    (絞り込みの結果は、絞り込んだ状態で全て未定義状態です)


    良く考えてみると

    else
     &msg = "該当日が見当たりません"
      メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
     end

    このプログラムは書いているだけで、エラー判断が無いので意味をなしてない気がします・・・


    絞り込み期間入力を間違えた時 処理を止める方法が分かる方 お時間がある時教えて頂けたら幸いですm(__)m


[ □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14350 ] / ▼[ 14353 ]
■14351 / 1階層)  Re[1]: 期間絞込でのエラー時対応について
□投稿者/ まさやん -(2024/05/20(Mon) 11:46:00)
    2024/05/20(Mon) 12:06:56 編集(投稿者)
    2024/05/20(Mon) 11:47:45 編集(投稿者)
    2024/05/20(Mon) 11:47:12 編集(投稿者)

    >
    > しかし、 24/4/1 〜 24/3/1 の様に間違えた入力でも絞り込めてしまいます。
    > (絞り込みの結果は、絞り込んだ状態で全て未定義状態です)
    >

    > 絞り込み期間入力を間違えた時 処理を止める方法が分かる方 お時間がある時教えて頂けたら幸いですm(__)m


    上記の場合

    関数で  #日数というのがあります。

    詳しくは ヘルプを

    絞り込み始まる前に

    #日数で 求められた結果が  0以下の時の
    メッセージ が出るように したらどうかな?

     #日数(24/4/1,24/3/1) の結果は  マイナスの結果になります
[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14351 ] / 返信無し
■14353 / 2階層)  Re[2]: 期間絞込でのエラー時対応について
□投稿者/ ジェダイの桐 -(2024/05/20(Mon) 17:39:37)
    まさやんさん

    > 関数で  #日数というのがあります。
    >
    > #日数で 求められた結果が  0以下の時の
    > メッセージ が出るように したらどうかな?
    >
    >  #日数(24/4/1,24/3/1) の結果は  マイナスの結果になります


    日数と言う関数知りませんでした。
    教えて頂いた関数を使用しイメージ通りの結果を求める事が出来ました。

    回答ありがとうございましたm(__)m
解決済み!
[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14350 ] / ▼[ 14354 ] ▼[ 14356 ]
■14352 / 1階層)  Re[1]: 期間絞込でのエラー時対応について
□投稿者/ AK -(2024/05/20(Mon) 15:33:19)
    2024/05/23(Thu) 08:38:45 編集(投稿者)


    > 良く考えてみると
    >
    > else
    >  &msg = "該当日が見当たりません"
    >   メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
    >  end

    > このプログラムは書いているだけで、エラー判断が無いので意味をなしてない気がします・・・
    > 絞り込み期間入力を間違えた時 処理を止める方法が分かる方 お時間がある時教えて頂けたら幸いですm(__)m

    これは、「絞り込み開始日 と 絞り込み終了日 が正しく入力出来ていれば思った通りの動き」をしますが、

    「該当するレコードが無い場合」メッセージを表示させるためのものです。

    例えばモーダルフォームで
    絞り込み開始日 → 令和6年4月 1日
    絞り込み終了日 → 令和6年4月19日

    と入力して実行したとしても、主フォーム側の該当する日(レコードが)がない場合に表示するするというものです。

    試しに、主フォーム側のレコードの4/20〜4/30をわざと削除して、上記の日で絞り込みを実行するとわかるはずです。

    > このプログラムは書いているだけで、エラー判断が無いので意味をなしてない気がします・・・

    そのためこの考えは誤りになります。
    また、そもそも意味をなさないコードはそもそも書く必要がありませんので当然書きません。
    これは後にコードを修正する場面で余計な作業や誤解を招くのを避けるためです。

    今回のジェダイの桐さんの意図する質問を少し読み替えると、

    ユーザが間違った入力をした場合に、コマンドボタンを実行させないという風に読み替えた方がスマートかな?と感じました。

    私がいつも職場で使用している例をお伝えします。

    入力した日付の情報を変数で比較させます。

    今回の場合、イベントコードを書かない方法です。

    これはイベントコードでも対応できますが後々のコードの回収作業が発生するとと、ふぉーむがわで出来ることをわざわざコードにしなくてもよくて非常にシンプルです。

    コマンドボタンの機能名とパラメータリストを修正します。

      機能名  機能名パラメータリスト

    1 実行条件  &mRefinementStartDate≦&mRefinementEndDate

    2 表示 

    3 手続き実行 cmd絞込開始Click

    これだけでそもそもコマンドボタンが実行できなります。
    視覚的にすぐにユーザが自分の間違いに気づくはずです。
    またフォーム側のテキストボックスを工夫(例えば背景色を赤にするとか・・・)とさらにユーザに親切なフォームになると思います。

    最後に掲載されているコードは、メッセーボックスを押しただけで必ず絞り込みを実行するコマンドなっていて制御構文の条件の順番が間違っていましたので以下のように修正すると、思うように動くと思います。
    また、コードを拝見しましたが適切な空行の挿入、それとif文の入れ子はしっかり字下げ(私の場合は2文字基準)しないと今後コードを修正する時に読みづらくなるので実践された方が良いと思います。


    手続き定義開始 cmd絞込開始Click()

     変数宣言 自動, 数値  { &ans }
     変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }

     &msg = "絞り込み開始日 と 絞り込み終了日 が選択されました。"
     &msg = &msg + "\n日付 " + #文字列( &mRefinementStartDate ) + " 〜 " + #文字列( &mRefinementEndDate ) + "を絞り込みますか?"
     メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &ans

     if( &ans = 1 )
          
       表 "日付絞り込み.TBX"
         解除 *
         絞り込み [日付] { &mRefinementStartDate<=[]<=&mRefinementEndDate } 

         if( .not #eof )
             
           &msg = "絞り込み完了しました"
           メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
           メソッド呼び出し 戻り値= &実行リターン, @cmd閉じる. 実行()
           
         else
           
           &msg = "該当日が見当たりません"
           メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
           
         end
       
     else

       &msg = "キャンセルしました"
       メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない

     end


    手続き定義終了

    追伸

    私も十数年前にONnojiさんに指導を受けて今に至ります。
    今回のジェダイの桐さんの質問を拝見すると当時の自分に似ていると思いながらコメントしました・・・(^^;

[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14352 ] / 返信無し
■14354 / 2階層)  Re[2]: 期間絞込でのエラー時対応について
□投稿者/ ジェダイの桐 -(2024/05/20(Mon) 17:48:12)
    AKさん


    > ユーザが間違った入力をした場合に、コマンドボタンを実行させないという風に読み替えた方がスマートかな?と感じました。
    >
    > 私がいつも職場で使用している例をお伝えします。
    >
    > 入力した日付の情報を変数で比較させます。
    >
    > 今回の場合、イベントコードを書かない方法です。
    >
    > これはイベントコードを書くと改修作業が不要になるため、見通しもよくて非常にシンプルです。
    >
    > コマンドボタンの機能名とパラメータリストを修正します。
    >
    >   機能名  機能名パラメータリスト
    >
    > 1 実行条件  &mRefinementStartDate≦&mRefinementEndDate
    >
    > 2 表示 
    >
    > 3 手続き実行 cmd絞込開始Click
    >
    > これだけでそもそもコマンドボタンが実行できなります。
    > 視覚的にすぐにユーザが自分の間違いに気づくはずです。
    > またフォーム側のテキストボックスを工夫(例えば背景色を赤にするとか・・・)とさらにユーザに親切なフォームになると思います。


    こういうやり方もあるんですね!
    分かりやすいし、効果テキメンでした(^^♪

    この方式を取り入れようと思います!


    > 最後に掲載されているコードは、メッセーボックスを押しただけで必ず絞り込みを実行するコマンドなっていて制御構文の条件の順番が間違っていましたので以下のように修正すると、思うように動くと思います。
    > また、コードを拝見しましたが適切な空行の挿入、それとif文の入れ子はしっかり字下げ(私の場合は2文字基準)しないと今後コードを修正する時に読みづらくなるので実践された方が良いと思います。


    アドバイスありがとうございます!
    意識して読みやすいプログラムを書くようにしているのですが、
    まだまだですね(^^;

    if else が入ってくると、途端に書き方や構文が難しくなります・・・
    解説ありがとうございました!


    > 追伸
    >
    > 私も十数年前にONnojiさんに指導を受けて今に至ります。
    > 今回のジェダイの桐さんの質問を拝見すると当時の自分の似ていると思いながらコメントしました・・・(^^;


    p.s.


    まさか AKさん からコメントが着くとは思いもよりませんでした!
    嬉しい限りです(^^)/


    桐のレベルはまだまだですが、今プログラムを考えるのが楽しくなってきました!


    ONnojiさんや掲示板で回答を下さる方々に教えて貰いながら、少しづつですが
    プログラムが上達してきました!


    皆さんの対応が有難いですm(__)m


[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14352 ] / 返信無し
■14356 / 2階層)  Re[2]: 期間絞込でのエラー時対応について
□投稿者/ まさやん -(2024/05/20(Mon) 19:39:54)

    >
    >   機能名  機能名パラメータリスト
    >
    > 1 実行条件  &mRefinementStartDate≦&mRefinementEndDate
    >


    実行条件の使い方 

    私も 勉強になりました。
    一括処理で組んでた 仕事用のプログラムを
    イベントに移行中です。

    実に コマンドが 約半分くらいになるかもです。

    if else end
    この使い方すれば 実に明解そのものですね
    ありがとうございました。
[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14354 ] / ▼[ 14360 ]
■14355 / 3階層)  Re[3]: 期間絞込でのエラー時対応について
□投稿者/ AK -(2024/05/20(Mon) 19:36:28)
    2024/05/23(Thu) 08:45:27 編集(投稿者)


    > 桐のレベルはまだまだですが、今プログラムを考えるのが楽しくなってきました!
    > ONnojiさんや掲示板で回答を下さる方々に教えて貰いながら、少しづつですが
    > プログラムが上達してきました!

    ジェダイの桐さん

    余計なお世話ですが参考までに私の経験上良かったと思えるイベント勉強方法お伝えします。^^

    1 少ないコードでもよいですが、毎日実際にコードを書いてたくさんエラーコードを学ぶとよい
     
     これは初心者、初級者のうちは非常に大事なことだと思います。
     特に勉強と一緒で人が書いたコードを読んで理解している「つもり」は一番ダメです。
     どんなに短いコードでも実際に自分で書いて、どういう結果や挙動になるか経験して失敗をいっぱい重ねることが上達への近道だと思います。

    2 トレース出力ウィンドウを上手に使う。

     桐にはトレース出力ウィンドウがありますのでこれを上手に使うことも上達の近道だと思います。
     設定方法はヘルプを参照してください。
     これを使用する理由はシンプルで、変数の値の変化を目視で確認できるからです。
     最初のうちは変数値の変化が頭の中でよく理解できていないことが多いと思います。
     そしてコードを書くことに慣れてくると、何れループ処理を勉強すると思いますがここが初級者にとって結構高いハードルになると思います。
     その際、トレース出力ウィンドウを利用するとループ処理のインクリメントなど変数の値の変化を確認できるので非常に便利です。
     また、上達していけばいくほどプログラムのコード量が増えて、プログラム自体が肥大化していくのでシステムを改修する場合などトレース出力ウィンドウは必須になると思います。

     私はイベントを勉強し始めて長い間ループ処理が苦手で悩まされましたので是非活用してみてください。

     以下は先ほどのイベントコードで変数を確認するためのサンプルです。

    手続き定義開始 cmd絞込開始Click()

     変数宣言 自動, 数値  { &ans }
     変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }
     変数宣言 自動, 整数  { &TraceON = 1 } ← この変数を追加

     &msg = "絞り込み開始日 と 絞り込み終了日 が選択されました。"
     &msg = &msg + "\n日付 " + #文字列( &mRefinementStartDate ) + " 〜 " + #文字列( &mRefinementEndDate ) + "を絞り込みますか?"
     メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &ans

     条件(&TraceON) トレース出力_&ans

     ↑ この1行で何がわかるのか?というと、メッセージボックスで「はい」を押したときの戻り値【 1 】 が変数&ansに代入されたことがトレース出力ウィンドウで確認できます。
     
     今度は試しに「いいえ」を押下するとどうなるか?是非実際にコードを書いて試してみて下さい。

     そうすると、if( &ans = 1 )の制御文の意味がわかるはずです。


    3 最後に私の苦い経験を踏まえて・・・

     私もイベントコードを書き始めの頃コードを書くことで色々できることが増えて楽しくてしかたがありませんでした。(^^;
     しかし、ここに罠が潜んでいます。
     コマンドボタンの設定で済む単純なことも含め、なんでもかんでもコードを書いてしまっていした。
     ONnoijさんの言葉を借用させていただくと、「イベント過多症候群」です。
     最近私は10年ほど前に所属していた部署で作成した桐アプリを改修する作業をチョコチョコしています。
     そこで目にした10年前の自分が書いた基本ができていない汚いコードと、コマンドボタンで対応できる無駄コードの多さに我ながらうんざりしています。(^^;
     
     この経験を振り返るとイベントコードはどうしても自分がしたいことが実現できな時にだけ使用するということだと思います。
     当たり前といえば当たり前ですが、私はこれが出来ていなくて10年前の自分自身にうんざりしています。(^^;

     桐はそもそもそんなにイベントコードを書かなくてもたいていのことはコマンドボタンの機能で何とかなる場合が多いです。
     今回の質問もそれで対応できましたので、なんとなく理解していただけるのではないでしょうか?
     
     なので、もちろん経験や慣れの問題もありますのでその見極めは難しいかもしれませんが、私のようにならないように気に留めておいていただくといいかなと思います。

     今後のジェダイの桐さんの質問を私も楽しみにしております。

     長文、駄文失礼しました。<(_ _)>
[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14355 ] / ▼[ 14362 ]
■14360 / 4階層)  Re[4]: 期間絞込でのエラー時対応について
□投稿者/ ジェダイの桐 -(2024/05/21(Tue) 14:50:56)
    AKさん


    こんにちは(^^)/


    > 1 少ないコードでもよいですが、毎日実際にコードを書いてたくさんエラーコードと学ぶとよい
    >  


    これは本当にそう思います。
    実際にやってみるから、自分の経験に繋がり力となるんですよね。


    > 2 トレース出力ウィンドウを上手に使う。


    >  以下は先ほどのイベントコードで変数を確認するためのサンプルです。
    >
    > 手続き定義開始 cmd絞込開始Click()
    >
    >  変数宣言 自動, 数値  { &ans }
    >  変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }
    >  変数宣言 自動, 整数  { &TraceON = 1 } ← この変数を追加
    >
    >  &msg = "絞り込み開始日 と 絞り込み終了日 が選択されました。"
    >  &msg = &msg + "\n日付 " + #文字列( &mRefinementStartDate ) + " 〜 " + #文字列( &mRefinementEndDate ) + "を絞り込みますか?"
    >  メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &ans
    >
    >  条件(&TraceON) トレース出力_&ans
    >
    >  ↑ この1行で何がわかるのか?というと、メッセージボックスで「はい」を押したときの戻り値【 1 】 が変数&ansに代入されたことがトレース出力ウィンドウで確認できます。
    >  
    >  今度は試しに「いいえ」を押下するとどうなるか?是非実際にコードを書いて試してみて下さい。
    >
    >  そうすると、if( &ans = 1 )の制御文がわかるはずです。


    書き方教えて頂きありがとうございますm(__)m


    トレース出力の結果です。


    一括実行:メイン処理を実行開始しました
    一括実行:メイン処理を実行終了しました
    一括実行:手続き"cmd絞込開始Click( )"を実行開始しました
        :&ans : 1
    一括実行:手続きを実行終了しました
    一括実行:メイン処理を実行開始しました
    一括実行:メイン処理を実行終了しました
    一括実行:手続き"cmd絞込開始Click( )"を実行開始しました
        :&ans : 2
    一括実行:手続きを実行終了しました


    はい を選択した時  → &ans : 1

    いいえ を選択した時 → &ans : 2


    が 変数に入っていました!
    こうやって確認するんですね!


    (そういえば以前、ONnojiさんに教えて頂いたプログラムの中にもトレース出力がありました。)



    >
    > 3 最後に私の苦い経験を踏まえて・・・
    >

    >  イベントコードはどうしても自分がしたいことが実現できな時にだけ使用するということだと思います。
    >  当たり前といえば当たり前ですが、私はこれが出来ていなくて現在10年前の自分にうんざりしています。(^^;
    >
    >  桐はそもそもそんなにイベントコードを書かなくてもたいていのことはコマンドボタンの機能で何とかなる場合が多いです。
    >  今回の質問もそれで解決できましたので、なんとなく理解していただけるのではないでしょうか?
    >  


    本当にびっくりしました。
    実行条件 初めて使いました。
    この機能名すごく便利ですね(^^♪
    まず、プログラムを考える前に機能名で解決出来る方法がないかしっかり考えた方が良いと言う事が本当の意味で理解出来ました!


    今回は本当にありがとうございましたm(__)m
[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14360 ] / ▼[ 14382 ]
■14362 / 5階層)  Re[5]: 期間絞込でのエラー時対応について
□投稿者/ ONnoji -(2024/05/21(Tue) 15:21:33)
    2024/05/21(Tue) 15:30:56 編集(投稿者)

    横レスで失礼します。m(__)m

    初級者の人にたくさんの情報をお届けすると消化不良になるかもしれませんが・・・(^^ゞ

    トレース出力コマンドの表示内容って読み難いですよねぇ〜。

    一括実行:メイン処理を実行開始しました
    一括実行:メイン処理を実行終了しました
    一括実行:手続き"cmd絞込開始Click( )"を実行開始しました
        :&ans : 1
    一括実行:手続きを実行終了しました
    一括実行:メイン処理を実行開始しました
    一括実行:メイン処理を実行終了しました
    一括実行:手続き"cmd絞込開始Click( )"を実行開始しました
        :&ans : 2
    一括実行:手続きを実行終了しました

    ↑この程度ならばなんとか判読可能です。

    しかし、もっと手続きの入れ子が深くなると・・・ほぼ解読不能です。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・

    そこで、拙作:整形ユーティリティ utx_list3 を利用すると、次のように読み易くしてくれます。

    ※【多遊】さんのダウンロードコーナー #206 イベント処理の整形ユーティリティ 第 3.91 版  for 桐10 / 桐10s / 桐sSL でダウンロード出来ます。

    ┌when メイン処理を実行開始しました
    └end

    ┌when 手続き"cmd絞込開始Click( )"を実行開始しました

    │ :&ans : 1

    └end

    ┌when メイン処理を実行開始しました
    └end

    ┌when 手続き"cmd絞込開始Click( )"を実行開始しました

    │ :&ans : 2

    └end

    とね。(*^^)v

    もちろん、これは必須ではありませんので、こんなことも出来るんだなぁ〜と思っていただければ十分ですよ。

    こちら
     ↓
    桐の釣魚大全のトップ > 整形ユーティリティ教書 基本編
    整形ユーティリティ教書 基本編 ― 桐のアプリケーション開発を支援するユーティリティ
    http://silicon7565.html.xdomain.jp/guide/guide_ReformUtility_Part1.htm

    40 [トレース出力]ウィンドウと[トレース出力]コマンド
    http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section40

    40.3 整形ユーティリティでトレース出力結果を整形する
    http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section40


[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14362 ] / ▼[ 14383 ]
■14382 / 6階層)  Re[6]: 期間絞込でのエラー時対応について
□投稿者/ ジェダイの桐 -(2024/05/23(Thu) 17:27:14)
    ONnojiさん


    > そこで、拙作:整形ユーティリティ utx_list3 を利用すると、次のように読み易くしてくれます。
    >
    > ※【多遊】さんのダウンロードコーナー #206 イベント処理の整形ユーティリティ 第 3.91 版  for 桐10 / 桐10s / 桐sSL でダウンロード出来ます。
    >
    > ┌when メイン処理を実行開始しました
    > └end
    >
    > ┌when 手続き"cmd絞込開始Click( )"を実行開始しました
    > │
    > │ :&ans : 1
    > │
    > └end
    >
    > ┌when メイン処理を実行開始しました
    > └end
    >
    > ┌when 手続き"cmd絞込開始Click( )"を実行開始しました
    > │
    > │ :&ans : 2
    > │
    > └end
    >
    > とね。(*^^)v
    >
    > もちろん、これは必須ではありませんので、こんなことも出来るんだなぁ〜と思っていただければ十分ですよ。


    AKさんにもお勧め頂いたし、何より見やすいプラグラムを書きたいなと思い、
    utx_list3 をインストールしました。


    感想ですが、もっと早くインストールすれば良かったな思いました(^^)/
    字下げを自動でやってくれるのは、有難いです。


    整形ユーティリティ教書 基本編 を読み込んで より使い方を勉強させて頂きますm(__)m


[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14382 ] / 返信無し
■14383 / 7階層)  Re[7]: 期間絞込でのエラー時対応について
□投稿者/ ONnoji -(2024/05/23(Thu) 17:31:31)
    2024/05/23(Thu) 17:38:51 編集(投稿者)

    > AKさんにもお勧め頂いたし、何より見やすいプラグラムを書きたいなと思い、
    > utx_list3 をインストールしました。
    > 感想ですが、もっと早くインストールすれば良かったな思いました(^^)/
    > 字下げを自動でやってくれるのは、有難いです。
    > 整形ユーティリティ教書 基本編 を読み込んで より使い方を勉強させて頂きますm(__)m

    「整形ユーティリティ教書 基本編」は紹介記事なので、

    同梱の説明書の

     1st_ヘルプ_utx_list3.txt

    も併せてお読みください。

[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14350 ] / ▼[ 14361 ]
■14358 / 1階層)  Re[1]: 期間絞込でのエラー時対応について
□投稿者/ ONnoji -(2024/05/20(Mon) 23:34:32)
    2024/05/21(Tue) 13:18:51 編集(投稿者)
    2024/05/21(Tue) 07:58:02 編集(投稿者)
    2024/05/20(Mon) 23:54:01 編集(投稿者)

    当方は土日月とPCの前に居ませんでしたので詳細はよく理解していません。

    すでに解決済みになってとのこと慶祝です。

    なので余計なことは言わないように致しますが・・・

    ちなみに、実に気になったことがあったので、老婆心ながら投稿させていただきます。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    このツリーを読んで居る時、

    > if( .not #eof )
    >  if( &ans = 1 )

    というコマンドの記述を発見しました。

    これは私( ONnoji )の感想ではありますが、

    なぜ "if" と 丸括弧"(" の間に半角または全角の空白が無いのだろうか?????

    DOS桐もWin桐もコマンドの文法(シンタックス)は同じです。

    しかし、なぜか?Win桐では[if]コマンドと条件式の間に半角または全角の空白を挿入しない例を多々見受けます。

    これは、DOS桐/Win桐の言語仕様ではアウトです。

     【転載】[桐 - ヘルプ]→ 一括処理・イベント処理 → 入門 → 一括処理の実行 → 一括処理の書き方
      一括処理コマンドを記述するときは、コマンド名と最初のパラメータのあいだを、1文字以上の空白文字で区切ります。
                       ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    しかし、実際にはエラーしないので、「まぁ、いいっか!」となっちゃう開発者が多いと思いますね。

    ********************************
    桐の if コマンドは、関数ではないので、エクセルの関数のような記述は誤りですゾ。動くか動かないかは別として・・・
    ********************************

    開発者は一度でも[桐 - ヘルプ]を読むべきですね。

    Win桐という製品の仕様を説明しているヘルプを読まずに、単純にエラーが出ないという理由でスルーするという態度は当然良くないですよ。

    交通規則を守りましょう!と同じですよ。これは事故に遭遇するかしないかとは別問題でモラルの問題です。柔らかな機械でも同じです。

    p.s.

    転載【[桐 - ヘルプ]→ 一括処理・イベント処理 → 入門 → 一括処理の実行 → 一括処理の書き方】

    ひとつの一括処理コマンドは、コマンド名といくつかのパラメータで構成されています。
    たとえばつぎの例では、最初の「表」がコマンド名、そのうしろの下線部分がパラメータです。

      表 "Jusho.tbx",表番号=1,モード=共有更新

    ・一括処理コマンドを記述するときは、コマンド名と最初のパラメータのあいだを、1文字以上の空白文字で区切ります。空白文字は半角でも全角でもかまいません。
     ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    ・パラメータとパラメータのあいだは、半角または全角のコンマ(,)で区切ります。

[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14358 ] / 返信無し
■14361 / 2階層)  Re[2]: 期間絞込でのエラー時対応について
□投稿者/ ジェダイの桐 -(2024/05/21(Tue) 14:58:55)
    2024/05/21(Tue) 14:59:27 編集(投稿者)

    ONnojiさん


    こんにちは!


    > > if( .not #eof )
    > >  if( &ans = 1 )
    >
    > というコマンドの記述を発見しました。
    >
    > これは私( ONnoji )の感想ではありますが、
    >
    > なぜ "if" と 丸括弧"(" の間に半角または全角の空白が無いのだろうか?????
    >
    >
    >  【転載】[桐 - ヘルプ]→ 一括処理・イベント処理 → 入門 → 一括処理の実行 → 一括処理の書き方
    >   一括処理コマンドを記述するときは、コマンド名と最初のパラメータのあいだを、1文字以上の空白文字で区切ります。
    >                    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    >
    > ********************************
    > 桐の if コマンドは、関数ではないので、エクセルの関数のような記述は誤りですゾ。動くか動かないかは別として・・・
    > ********************************
    >
    > p.s.
    >
    > 転載【[桐 - ヘルプ]→ 一括処理・イベント処理 → 入門 → 一括処理の実行 → 一括処理の書き方】
    >
    > ひとつの一括処理コマンドは、コマンド名といくつかのパラメータで構成されています。
    > たとえばつぎの例では、最初の「表」がコマンド名、そのうしろの下線部分がパラメータです。
    >
    >   表 "Jusho.tbx",表番号=1,モード=共有更新
    >
    > ・一括処理コマンドを記述するときは、コマンド名と最初のパラメータのあいだを、1文字以上の空白文字で区切ります。空白文字は半角でも全角でもかまいません。


    こう言うルール(所作)があったのですね・・・
    今後気を付けて、プログラム作成していきます。


    プログラムを作る上で、変なクセ で覚えてしまう前に教えて頂けたので
    助かりました!


    ありがとうございますm(__)m

[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14350 ] / ▼[ 14364 ] ▼[ 14365 ]
■14363 / 1階層)  Re[1]: 期間絞込でのエラー時対応について
□投稿者/ ONnoji -(2024/05/21(Tue) 18:47:00)
    2024/05/21(Tue) 18:52:49 編集(投稿者)

    やはり変なので確認させてください。

    ■期間指定絞込.kex 

    名札 メイン
     変数宣言 局所, 日時 { &mRefinementStartDate, &mRefinementEndDate }

     表 "日付絞り込み.TBX"
     &mRefinementStartDate = [日付]
     &mRefinementEndDate = [日付]



    手続き定義開始 cmd絞込開始Click()

     変数宣言 自動, 数値  { &ans }
     変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }

     &msg = "絞り込み開始日 と 絞り込み終了日 が選択されました。"
     &msg = &msg + "\n日付 " + #文字列( &mRefinementStartDate ) + " 〜 " + #文字列( &mRefinementEndDate ) + "を絞り込みますか?"
     メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &ans

    ┌if( &ans = 1 )

    │ 表 "日付絞り込み.TBX"
    │ 解除 *
    │ 絞り込み [日付] { &mRefinementStartDate<=[]<=&mRefinementEndDate }

    │┌if( .not #eof )
    ││
    ││ &msg = "絞り込み完了しました"
    ││ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
    ││ メソッド呼び出し 戻り値= &実行リターン, @cmd閉じる. 実行()
    ││
    │├else
    ││
    ││ &msg = "該当日が見当たりません"
    ││ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
    ││
    │└end

    │ 編集表 "日付絞り込み.TBX"
    │ 終了 表 編集対象表

    ├else

    │ &msg = "キャンセルしました"
    │ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない


    └end


    手続き定義終了


    "日付絞り込み.wfx(編集対象表:日付絞り込み.tbx)"から"期間指定絞込.wfx"をモーダルフォームで開き

      名札 メイン
       変数宣言 局所, 日時 { &mRefinementStartDate, &mRefinementEndDate }

       表 "日付絞り込み.TBX"
       &mRefinementStartDate = [日付]
       &mRefinementEndDate = [日付]
      *

    ですから、次のような

    日付絞り込み.WFX

      機能名      機能パラメータリスト
     1 表示
     2 モーダルフォーム 期間指定絞込.wfx
     3 なし
     4 なし

      主ウィンドウ                モーダルフォーム(ダイアログボックス)
     ┌──────────────────┐   ┌──────────────────┐
     │日付絞り込み.wfx          │   │期間指定絞込.wfx          │
     │                  │   │                  │
     │                  │   │ 期間指定絞込.kex         │
     │機能名      機能パラメータリスト   │   │ 表 "日付絞り込み.TBX"      │
     │1 表示               │   │  :               │
     │2 モーダルフォーム 期間指定絞込.wfm┝━━━┥  :               │
     │                  ┝━━━┥  :               │
     │                  │   │ 編集表 "日付絞り込み.TBX"    │
     │                  │   │ 終了 表 編集対象表 ← エラー │
     └───────┬──────────┘   └──────────────────┘
             │
           編集対象表
             │
     ┌───────┴─────────┐
     │日付絞り込み.TBX         │ 
     │                 │
     │                 │
     │                 │
     │                 │
     │                 │
     └─────────────────┘

    こういう構成なわけです。

    でも

     編集表 "日付絞り込み.TBX"
     終了 表 編集対象表

    なんてやるとエラーでしょ。

     KU1066:イベントハンドラでは表示中の表を閉じることはできません

       ※お前は既に日付絞り込み.wfxで開いている。

    そちらでは、エラーになりませんでしたか???


[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14363 ] / 返信無し
■14364 / 2階層)  Re[2]: 期間絞込でのエラー時対応について
□投稿者/ AK -(2024/05/21(Tue) 19:12:34)
    >  編集表 "日付絞り込み.TBX"
    >  終了 表 編集対象表
    >
    > なんてやるとエラーでしょ。
    >
    >  KU1066:イベントハンドラでは表示中の表を閉じることはできません
    >
    >    ※お前は既に日付絞り込み.wfxで開いている。
    >
    > そちらでは、エラーになりませんでしたか???

    ONnojiさん
    ジェダイの桐 さん

    大変失礼しました。
    私の確認ミスで余計混乱させるコードを掲載してしまいました。
    ジェダイの桐さんの質問をよくよく読んでいないままコードを修正してしまい、かつ、実行していませんでした。

    ONnojiさんのおっしゃる通りです。
    上記のコードはもちろん不要であり、私の誤りです。

    訂正してお詫びいたします。

    正しくは、以下のとおりです。

    ※ ONnojiさんすいません、コードをコピーして使わせていただきます。


    名札 メイン
     変数宣言 局所, 日時 { &mRefinementStartDate, &mRefinementEndDate }

     表 "日付絞り込み.TBX"
     &mRefinementStartDate = [日付]
     &mRefinementEndDate = [日付]



    手続き定義開始 cmd絞込開始Click()

     変数宣言 自動, 数値  { &ans }
     変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }

     &msg = "絞り込み開始日 と 絞り込み終了日 が選択されました。"
     &msg = &msg + "\n日付 " + #文字列( &mRefinementStartDate ) + " 〜 " + #文字列( &mRefinementEndDate ) + "を絞り込みますか?"
     メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &ans

    ┌if( &ans = 1 )

    │ 表 "日付絞り込み.TBX"
    │ 解除 *
    │ 絞り込み [日付] { &mRefinementStartDate<=[]<=&mRefinementEndDate }

    │┌if( .not #eof )
    ││
    ││ &msg = "絞り込み完了しました"
    ││ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
    ││ メソッド呼び出し 戻り値= &実行リターン, @cmd閉じる. 実行()
    ││
    │├else
    ││
    ││ &msg = "該当日が見当たりません"
    ││ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
    ││
    │└end


    ├else

    │ &msg = "キャンセルしました"
    │ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない

    └end


    手続き定義終了



[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14363 ] / ▼[ 14366 ] ▼[ 14367 ]
■14365 / 2階層)  Re[2]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/21(Tue) 19:15:37)
    2024/05/22(Wed) 15:32:55 編集(投稿者)
    2024/05/22(Wed) 02:39:48 編集(投稿者)

    これは個人( ONnoji )の感想です。

    以下のようにモーダル側で、

     表 "日付絞り込み.TBX"

    なんてコマンドを実行するのは一番駄目なアプローチだと思いますよ。


      主ウィンドウ                 モーダルフォーム(ダイアログボックス)
     ┌──────────────────┐   ┌──────────────────┐
     │日付絞り込み.wfx          │   │期間指定絞込.wfx          │
     │                  │   │                  │
     │                  │   │ 期間指定絞込.kex         │
     │機能名      機能パラメータリスト   │   │ 表 "日付絞り込み.TBX"      │
     │1 表示               │   │  :               │
     │2 モーダルフォーム 期間指定絞込.wfm┝━━━┥  :               │
     │                  ┝━━━┥  :               │
     │                  │   │ 編集表 "日付絞り込み.TBX"    │
     │                  │   │ 終了 表 編集対象表 ← エラー │
     └───────┬──────────┘   └──────────────────┘
             │
           編集対象表
             │
     ┌───────┴─────────┐
     │日付絞り込み.TBX         │ 
     │                 │
     │                 │
     │                 │
     │                 │
     │                 │
     └─────────────────┘

    だって、"日付絞り込み.TBX"は、すでに開いているのですから、余計なチョッカイを出しちゃ面倒なんですよ。
                   ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    ここは、主ウィンドウ側の"日付絞り込み.kex"で

     変数宣言 固有,整数{ &gAnswer }
     変数宣言 固有,日時{ &gRefinementStartDate, &gRefinementEndDate }

    として、

     &gRefinementStartDate = [日付]
     &gRefinementEndDate  = [日付]

    と値を代入して(代入しなくてもいいけれど・・・)

    1.固有変数(または共通変数)でモーダル側でも値が参照できるようにして
    2.固有変数(または共通変数)で終了状態( &gAnser )も受取る
    3.もし、終了状態( &gAnser )がOK(1)なら実行

    ですね。

    例えば、

     オブジェクト名: cmd期間指定絞込
     標題     : 期間指定絞込

      機能名      機能パラメータリスト
     1 なし       #代入( &gRefinementStartDate, [日付]), #代入( &gRefinementEndDate, [日付])
     2 モーダルフォーム 期間指定絞込.wfx
     3 実行条件     ( &gAnswer = 1 )
     4 手続き実行    cmd期間指定絞込Click

    とかね。(^^ゞ ※あくまでもアバウトな例示です。詳細を含んだ例示ではありませんよ。

    こうすると、モーダルフォーム(ダイアログボックス)は、変数を操作するだけに専念できるでしょう。
          ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    そして、主ウィンドウでは、絞り込みに専念できるというわけです。
        ・・・・・・・・・・・・・・・・・・・

     ※そもそも、絞り込む機能は編集対象があるフォームの機能であって、NULLフォームが絞り込む機能を持つ必要はありません。
           ・・・・・・・・・・・・・・・・・・・・・     ・・・・・・・・・・・・・・・・・・

     ※NULLフォームは、編集対象があるフォームへ情報を伝えて、編集対象があるフォームが自ら実行すればよいのです。
      ・・・・・・・・・・・・・・・・・・・・・・・・・・             ・・・・・・・・・

    キモは、モーダル側で主ウィンドウの編集対象表の面倒を見ないことですよ。

    モーダルは単に変数の値を編集するだけ。※固有変数・共通変数・組み込み変数を編集します。

    そして、モーダルで編集された変数の値を参照して絞り込みを実行するのは、主ウィンドウ側のの手続きということです。

    こうすれば、機能分担がハッキリして、保守が楽になるということですよ。(^^ok

    モーダルフォームは補助ウィンドウなのですから、主役の仕事を横取りしてはいけないんですゾッ!。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    モジュール化は手続きのレベルだけでなく、フォームのレベルでも必要なんですよ。

    そう考えれば、自然に気が付きますよ。

    p.s.

    > モジュール化は手続きのレベルだけでなく、フォームのレベルでも必要なんですよ。

    モジュールとは交換可能な構成部分という意味ですね。

    だから、僭越にもモーダルフォームが主ウィンドウの範囲を対象にした機能を有していると、一体化しちゃって交換可能じゃなくなっちゃうでしょう。
                                              ・・・・・・・・・・・・・・・・・・・・・
    なので、モーダルフォームは主ウィンドウに対して余計なチョッカイを出してはいけないのですよ。

     <参考>

      桐の釣魚大全のトップ > フォームアプリケーション教書 第1部
      19.5 それぞれのフォームアプリケーションは独立しているので直接的な干渉をしない
      http://silicon7565.html.xdomain.jp/guide/guide_Part1.htm#section19-5

    p.s.

    今回のように、NULLフォーム側で主人であるフォームの編集対象表を直接ハンドルするという発想は「フロー駆動型」です。

    「目からウロコのデータベース桐プログラミング入門」の「3 イベント駆動型のプログラミング」で論じたように、「フロー駆動型」は一括処理の考え方です。

    実は、過去の掲示板には「フォーム+イベント処理」のアプローチでありながら、心の中では「フロー駆動型」の例が非常に多いのです。
               ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    「フロー駆動型」とは、プログラムの作者がすべてを支配するということです。
               ・・・・・・・・・・・・・・・・・

    今回の件は、心の中では「フロー駆動型」の典型的な例だと思いますよ。

    例えが分り難いでしょうが、『ホビットの冒険』や『指輪物語』の一つの指輪(ひとつのゆびわ、One Ring)の持ち主のようになってはいけないのです。

    心の中に「フロー駆動型」の誘惑があると、「イベント駆動(イベントドリブン)」としての「フォーム+イベント処理」のアプローチが出来なくなります。

      【指輪の銘】 一つの指輪 出典: フリー百科事典『ウィキペディア(Wikipedia)』
      一つの指輪は全てを統べ、
      一つの指輪は全てを見つけ、
      一つの指輪は全てを捕らえて、暗闇の中に繋ぎとめる。
      (One Ring to rule them all, One Ring to find them, One Ring to bring them all, and in the darkness bind them)

    「イベント駆動(イベントドリブン)」のためには、一つの指輪を滅びの山に捨ててください。

    と、『指輪物語』を読んだことが無い人にはワカラナイことを書きましたが・・・(^^ゞ

    改めて、今回の件は、心の中では「フロー駆動型」の典型的な例だと思いますよ。

    「イベント駆動型」では、複数のフォームが存在しても、それらは独立していなければならないのです。

    そして、プログラムの作者がすべてを支配するというアプローチは放棄することです。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    これが「制御主体の反転」という意味です。

    そして、それこそが「イベント駆動型」の極意・真髄だと思いますよ。


[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14365 ] / 返信無し
■14366 / 3階層)  Re[3]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/22(Wed) 10:52:26)
    2024/05/22(Wed) 11:26:00 編集(投稿者)
    2024/05/22(Wed) 11:09:16 編集(投稿者)

    > 「イベント駆動型」では、複数のフォームが存在しても、それらは独立していなければならないのです。
    > そして、プログラムの作者がすべてを支配するというアプローチは放棄することです。
    >     ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    > これが「制御主体の反転」という意味です。
    > そして、それこそが「イベント駆動型」の極意・真髄だと思いますよ。

    なかなか意味が伝わらないと思われるので、「制御主体の反転」を具体的に示そうと思います。

    まず、二種類の制御の主体を考えます。

    1.制御主体がプログラムの作者であるケース

    2.制御主体がソフトウェアの仕掛けであるケース

    1のケースは、プログラムの作者がすべてを支配するということです。

    これは「フロー駆動型」です。

    「フロー駆動型」の典型は、まさしく一括処理です。

    一括処理では、プログラムの作者がプログラムの流れをすべて記述しますね。

    一括処理では、プログラムのスタートから、プログラムのフィニッシュまでの全て記述しなければなりません。

    つまり、プログラムの作者がすべてを支配しているわけで、制御権はプログラムの作者が握っているのです。

    2のケースは、ピタゴラスイッチやドミノ倒しのようにソフトウェアを作るということです。

    ご存じのように、ピタゴラスイッチやドミノ倒しでは、あるきっかけによって、連続的に動作が継続するという仕掛けです。

    「イベント駆動型(イベントドリブン)」では、これらの仕掛けを必要な数だけ用意するということになります。

    従って制御の主体は、ソフトウェアの仕掛けということになります。

    「フォーム+イベント処理」では、ソフトウェアの仕掛けとして次のものがあります。

    ・コマンドボタンの機能
    ・イベント発生の設定とイベントハンドラ

    これらを駆使して個々の操作に対応する仕掛けを複数個作りあげて、

    フォームが開いた時点で待機(アイドリング)するというのが「イベント駆動型(イベントドリブン)」です。

    ということで、この状態を「制御主体がソフトウェアの仕掛けである」と呼ぶことにしましょう。

    以上の説明を読んでいただければ、「制御の主体」が1と2では異なっていると理解できるでしょう。

    私( ONnoj )は、この事を「制御主体の反転」と呼んでいるのでした。

    p.s.

    > 実は、過去の掲示板には「フォーム+イベント処理」のアプローチでありながら、心の中では「フロー駆動型」の例が非常に多いのです。

    DOS桐や桐ver.7で一括処理でアプリケーションを作っていた人達の多くが「制御主体の反転」に気が付いていないと思います。

    だから、過去の掲示板には、外見が「フォーム+イベント処理」でありながら、中身が一括処理のような例が非常に多く見つかると思います。

    それを、心の中では「フロー駆動型」と表現した次第です。

    p.p.s.

    > ご存じのように、ピタゴラスイッチやドミノ倒しでは、あるきっかけによって、連続的に動作が継続するという仕掛けです。
    > 「イベント駆動型(イベントドリブン)」では、これらの仕掛けを必要な数だけ用意するということになります。

    「イベント駆動型(イベントドリブン)」の場合には、フォームに用意されている機能に精通している必要があります。

    しかし、プログラムの作者がすべてを支配するというアプローチに慣れている人達はコマンドに精通しているんですね。

    そう、まさしくコマンド命ですから、フォームに用意されている機能には無知で、まるで一括処理のようなアプローチをしてしまうのです。
                     ・・・・・・・・・・・・・・・・・・

    つまり、「制御主体の反転」に気付いていないために、余計に泥沼にハマって抜け出せない状態に陥るのですよ。

[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14365 ] / ▼[ 14368 ]
■14367 / 3階層)  Re[3]: モジュール化はフォームのレベルでも必要
□投稿者/ ジェダイの桐 -(2024/05/22(Wed) 16:28:16)
    ONnojiさん


    こんにちは!



    >  表 "日付絞り込み.TBX"
    >
    > なんてコマンドを実行するのは一番駄目なアプローチだと思いますよ。


    これは、


    名札 メイン
     変数宣言 局所, 日時 { &mRefinementStartDate, &mRefinementEndDate }

     表 "日付絞り込み.TBX"
     &mRefinementStartDate = [日付]
     &mRefinementEndDate = [日付]


    ここの 表 "日付絞り込み.TBX" の事でしょうか?


    それとも、

    手続き定義開始 cmd絞込開始Click()
     変数宣言 自動, 数値  { &ans }
     変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }

     表 "日付絞り込み.TBX"


    この 表 "日付絞り込み.TBX" の事でしょうか??


    はたまた、両方でしょうか???


    確かに 日付絞り込み.TBX は開いているのにな・・・っとは思っていたんです。
    但し、これは漠然とした 違和感でしかありませんでした。


    やっぱり、考え方としておかしいですよね(^^;


    そこで、準備段階として


    > ここは、主ウィンドウ側の"日付絞り込み.kex"で
    >
    >  変数宣言 固有,整数{ &gAnswer }
    >  変数宣言 固有,日時{ &gRefinementStartDate, &gRefinementEndDate }

    この部分と

    >  オブジェクト名: cmd期間指定絞込
    >  標題     : 期間指定絞込
    >
    >   機能名      機能パラメータリスト
    >  1 なし       #代入( &gRefinementStartDate, [日付]), #代入( &gRefinementEndDate, [日付])
    >  2 モーダルフォーム 期間指定絞込.wfx
    >  3 実行条件     ( &gAnswer = 1 )
    >  4 手続き実行    cmd期間指定絞込Click


    この部分を作成しました。


    しかし、


    > ↑これらの変数は、フォーム定義の変数管理で宣言する方が[オブジェクトの属性]で参照できるのでベターです。
    >          ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・


    ここで ちょっと躓き中です。
    固有変数はフォーム定義の変数管理で保存出来ないのですかね??
    初めて知ったのですが、変数ファイル(.vax)と言うものがあるのですね(^^♪

    そのフォームを初めて立ち上げる時に読み込んで使用する感じなのでしょうか??


    ここは直ぐに分からない(理解出来ない)ので一旦置いていて、


    > 1.固有変数(または共通変数)でモーダル側でも値が参照できるようにして
    > 2.固有変数(または共通変数)で終了状態( &gAnser )も受取る
    > 3.もし、終了状態( &gAnser )がOK(1)なら実行


    今日は ここを ずっと考えています!


    1.これは理解が間違っていなければ → #代入( &gRefinementStartDate, [日付]), #代入( &gRefinementEndDate, [日付])

    で対応出来ていると思います。


    だから

    >&gRefinementStartDate = [日付]
    >&gRefinementEndDate  = [日付]

    >と値を代入して(代入しなくてもいいけれど・・・)


    代入しなくても良いと言われているのだろうと理解しています。
    (違う意味なのかも知れませんが・・・(^^;)


    2.固有変数(または共通変数)で終了状態( &gAnser )も受取る


    これが 本日最大のテーマ です(^^)/


    これは

    日付絞り込み.wfx ←→ 期間指定絞込.wfx 間で 変数の受け渡しをすれば
    解決するのではと考え

    フォームアプリケーション教書 第2部 36 フォームとフォーム間での変数受け渡しを熟読しております(^^ゞ


    変数の受け渡しを理解出来れば
    3.もし、終了状態( &gAnser )がOK(1)なら実行

    が 日付絞り込み.wfx 側の cmd期間指定絞込 で絞り込みが出来るのだろうと思っています。

    ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇


    日付絞り込み.wfx で cmd期間指定絞込 をクリックする

    期間指定絞込.wfx で 絞り込み期間を入力して cmd絞込開始 をクリックする
    期間指定絞込.kex で メッセージボックスで &gAnswer = 1 にする(つまり はい を押す)

    日付絞り込み.wfx に戻って 期間指定絞込.wfx での &gAnswer = 1 を引き取り 日付絞り込み.kex で cmd期間指定絞込Click の手続き実行を行う


    ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇

    流れは 恐らくこうなのでしょうが、実現方法(プログラムの書き方)が分かりません・・・


    だけど、変数の受け渡し方法をまず考え理解します!


    これは、私の中で結構なターニングポイントだと考えていて、これが理解出来れば

    >モーダルフォーム(ダイアログボックス)は、変数を操作するだけに専念できる
    >主ウィンドウでは、絞り込みに専念できる

    これが実現出来る訳で、この考え方はかなり応用範囲が広いのじゃないかと、直感的に思っています(^^)/


    上記の状況でしたので、返信が遅くなりました。
    もうちょっと、粘ってみます!


    どうしても答えが導き出せそうにない時は、SOSを出させてくださいm(__)m



[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14367 ] / ▼[ 14369 ]
■14368 / 4階層)  Re[4]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/22(Wed) 16:34:27)
    2024/05/22(Wed) 16:55:49 編集(投稿者)

    > 上記の状況でしたので、返信が遅くなりました。
    > もうちょっと、粘ってみます!
    > どうしても答えが導き出せそうにない時は、SOSを出させてくださいm(__)m

    ジェダイの桐さんの最初のお試しは、全然お話にならないです。悪しからず。

    これ以上時間を費やしても時間の無駄になるだけです。

    当方でサンプルを用意しましたので、30分以内にアップします。


    p.s.

    >> ↑これらの変数は、フォーム定義の変数管理で宣言する方が[オブジェクトの属性]で参照できるのでベターです。

    ↑この文言は当方の誤りでした。

    サンプルを作っている時に気が付きました。

    > 例えば、
    >  オブジェクト名: cmd期間指定絞込
    >  標題     : 期間指定絞込
    >   機能名      機能パラメータリスト
    >  1 なし       #代入( &gRefinementStartDate, [日付]), #代入( &gRefinementEndDate, [日付])
    >  2 モーダルフォーム 期間指定絞込.wfx
    >  3 実行条件     ( &gAnswer = 1 )
    >  4 手続き実行    cmd期間指定絞込Click
    > とかね。(^^ゞ ※あくまでもアバウトな例示です。詳細を含んだ例示ではありませんよ。

    ↑これはアバウトなイメージです。あくまでもイメージです。




[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14368 ] / ▼[ 14370 ]
■14369 / 5階層)  Re[5]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/22(Wed) 16:48:38)
    2024/05/22(Wed) 18:13:16 編集(投稿者)

    添付ファイルを解凍すると次のファイルがあります。

    期間指定絞込.kex
    期間指定絞込.wfx
    日付絞り込み.kex
    日付絞り込み.tbx
    日付絞り込み.wfx


    ■日付絞り込み.wfx

     フォーム
     ├ ファミリ
     ├ ワークスペース
     ├ フォームヘッダ部
     │ ├ a
     │ ├ lbl日付
     │ └ cmd期間指定絞込
     └ フォーム明細部
       ├ 行セレクタ
       └ txt日付

     オブジェクト名: cmd期間指定絞込
     標題     : 期間指定絞込

      機能名      機能パラメータリスト
     1 表示
     2 なし       #代入( &gRefinementStartDate, [日付] ), #代入( &gRefinementEndDate, [日付] )
     3 モーダルフォーム "期間指定絞込.wfx"
     4 手続き実行    cmd期間指定絞込Click



    ■日付絞り込み.kex

    名札  メイン
     変数宣言 固有,整数{ &gAnswer }
     変数宣言 固有,日時{ &gRefinementStartDate, &gRefinementEndDate }



    手続き定義開始 cmd期間指定絞込Click( )
     変数宣言 自動,文字列{ &title = "cmd期間指定絞込Click( )", &msg }
     変数宣言 自動,整数 { &traceON }

     &traceON = 1
     条件 ( &traceON ) トレース出力 &title + "を実行開始しました"

    ┌if ( &gAnswer = 1 )

    │ &msg =       "debug モーダルフォームから戻りました"
    │ &msg = &msg + "\n\n&gAnswer = " + #str( &gAnswer )
    │ &msg = &msg + "\n\n&gRefinementStartDate = " + #日時文字列( &gRefinementStartDate, 0, 4, 0 )
    │ &msg = &msg + "\n\n&gRefinementEndDate  = " + #日時文字列( &gRefinementEndDate,  0, 4, 0 )
    │ &msg = &msg + "\n\n変数の値は以上です"
    │ &msg = &msg + "\n\n変数の値を利用して絞り込む部分はご自身で作成してください (^^ok"
    │ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する

    ├else

    │ &msg =       "debug モーダルフォームから戻りました"
    │ &msg = &msg + "\n\n&gAnswer = " + #str( &gAnswer )
    │ &msg = &msg + "\n\n&gRefinementStartDate = " + #日時文字列( &gRefinementStartDate, 0, 4, 0 )
    │ &msg = &msg + "\n\n&gRefinementEndDate  = " + #日時文字列( &gRefinementEndDate,  0, 4, 0 )
    │ &msg = &msg + "\n\n変数の値は以上です"
    │ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する
    └end

     条件 ( &traceON ) トレース出力 &title + "を実行終了しました"
    手続き定義終了


    ■期間指定絞込.wfx

     フォーム
     ├ ファミリ
     ├ ワークスペース
     │ └ cmdStartup
     ├ フォームヘッダ部
     │ └ tタイトル
     ├ フォーム明細部
     │ ├ txtgRefinementStartDate
     │ │ └ lblgRefinementStartDate
     │ └ txtgRefinementEndDate
     │   └ lblgRefinementEndDate
     └ フォームフッタ部
       ├ cmdOK
       └ cmdキャンセル


     オブジェクト名: cmdStartup
     標題     : 開始時実行コマンド:cmdStartup

      機能名   機能パラメータリスト
     1 訂正
     2 なし
     3 なし
     4 なし

     オブジェクト名: cmdOK
     標題     : OK

      機能名   機能パラメータリスト
     1 実行条件  ( &gRefinementStartDate <= &gRefinementEndDate )
     2 なし    #代入( &gAnswer, 1 )
     3 閉じる
     4 なし

     オブジェクト名: cmdキャンセル
     標題     : キャンセル

      機能名   機能パラメータリスト
     1 閉じる
     2 なし
     3 なし
     4 なし


    ■期間指定絞込.kex

    名札 メイン

     **---- 変数が宣言されていなければ変数を宣言する ------**
     条件 ( #配列要素数( "gAnswer" )       <> 0 ) 変数宣言 固有,整数{ &gAnswer }
     条件 ( #配列要素数( "gRefinementStartDate" ) <> 0 ) 変数宣言 固有,日時{ &gRefinementStartDate }
     条件 ( #配列要素数( "gRefinementEndDate" )  <> 0 ) 変数宣言 固有,日時{ &gRefinementEndDate }
     **---- 変数が宣言されていなければ変数を宣言する ------**

     &gAnswer = 0 /* 初期値は0:キャンセル */


836×523 => 250×156

1716386255.jpg
/65KB
[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14369 ] / ▼[ 14371 ] ▼[ 14373 ] ▼[ 14385 ]
■14370 / 6階層)  Re[6]: モジュール化はフォームのレベルでも必要
□投稿者/ ジェダイの桐 -(2024/05/22(Wed) 17:12:53)
    ONnojiさん


    >  オブジェクト名: cmdOK
    >  標題     : OK
    >
    >   機能名   機能パラメータリスト
    >  1 実行条件  ( &gRefinementStartDate <= &gRefinementEndDate )
    >  2 なし    #代入( &gAnswer, 1 )
    >  3 閉じる
    >  4 なし
    >
    >  オブジェクト名: cmdキャンセル
    >  標題     : キャンセル
    >
    >   機能名   機能パラメータリスト
    >  1 閉じる
    >  2 なし
    >  3 なし
    >  4 なし


    ありがとうございます。

    cmdOK と cmdキャンセル でしたか・・・
    #代入( &gAnswer, 1 ) 確かに &gAnswer = 1 ですね。


    分かってしまえは、こういう考え方かとあっけないですね(T_T)


    かなり勉強になりました!


    ありがとうございましたm(__)m
[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14370 ] / ▼[ 14376 ]
■14371 / 7階層)  Re[7]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/22(Wed) 17:26:11)
    2024/05/22(Wed) 18:07:04 編集(投稿者)

    > cmdOK と cmdキャンセル でしたか・・・
    > #代入( &gAnswer, 1 ) 確かに &gAnswer = 1 ですね。
    > 分かってしまえは、こういう考え方かとあっけないですね(T_T)

    ウィンドウにはある程度のパターンがあるんですよ。

    これは主ウィンドウvs補助ウィンドウ(モーダル)のパターンです。

    パターンは多くないですからすぐに覚えてしまいますよ。

    それにしても、そちらが提示した内容ですが、どこの掲示板を参考にしたのでしょうかね。

    まあ、つまらない詮索は止めにしますが、

    昔の掲示板には、格好は「フォーム+イベント処理」であっても、気持ちは一括処理の例が非常に多いのでよくよく吟味してくださいね。


    p.s.

    >>なんてコマンドを実行するのは一番駄目なアプローチだと思いますよ。
    > これは、
    > 名札 メイン
    >  変数宣言 局所, 日時 { &mRefinementStartDate, &mRefinementEndDate }
    >
    >  表 "日付絞り込み.TBX"
    >  &mRefinementStartDate = [日付]
    >  &mRefinementEndDate = [日付]
    > ここの 表 "日付絞り込み.TBX" の事でしょうか?
    > それとも、
    > 手続き定義開始 cmd絞込開始Click()
    >  変数宣言 自動, 数値  { &ans }
    >  変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }
    >
    >  表 "日付絞り込み.TBX"
    > この 表 "日付絞り込み.TBX" の事でしょうか??
    > はたまた、両方でしょうか???

    両方です。

    > 確かに 日付絞り込み.TBX は開いているのにな・・・っとは思っていたんです。
    > 但し、これは漠然とした 違和感でしかありませんでした。
    > やっぱり、考え方としておかしいですよね(^^;

    これはほぼ一括処理と同じアプローチです。

    「フォーム+イベント処理」では、ピタゴラスイッチやドミノ倒しのようにプロクラムを作ってください。


    >>↑これらの変数は、フォーム定義の変数管理で宣言する方が[オブジェクトの属性]で参照できるのでベターです。

    この部分は当方の誤りでした。

    何故ならば、当方はグローバル変数(固有・共通)をほぼ100%使わないからです。

    だから、タラレバを書いてしまいました。m(__)m

    > そのフォームを初めて立ち上げる時に読み込んで使用する感じなのでしょうか??
    > ここは直ぐに分からない(理解出来ない)ので一旦置いていて、
    >>1.固有変数(または共通変数)でモーダル側でも値が参照できるようにして
    >>2.固有変数(または共通変数)で終了状態( &gAnser )も受取る
    >>3.もし、終了状態( &gAnser )がOK(1)なら実行

    百聞は一見にしかずですからサンプルを動かしてください。


    > 今日は ここを ずっと考えています!
    > 1.これは理解が間違っていなければ → #代入( &gRefinementStartDate, [日付]), #代入( &gRefinementEndDate, [日付])
    > で対応出来ていると思います。
    > だから
    > >&gRefinementStartDate = [日付]
    > >&gRefinementEndDate  = [日付]
    > >と値を代入して(代入しなくてもいいけれど・・・)
    > 代入しなくても良いと言われているのだろうと理解しています。
    > (違う意味なのかも知れませんが・・・(^^;)

    そうですが、初期値が入っていた方が入力する人には親切だろうと思いますよ。

    > 2.固有変数(または共通変数)で終了状態( &gAnser )も受取る
    > これが 本日最大のテーマ です(^^)/
    > これは
    > 日付絞り込み.wfx ←→ 期間指定絞込.wfx 間で 変数の受け渡しをすれば
    > 解決するのではと考え
    > フォームアプリケーション教書 第2部 36 フォームとフォーム間での変数受け渡しを熟読しております(^^ゞ

    第2部 36で扱っている内容は、グローバル変数(固有・共通)ではなく、局所変数の受け渡しです。

    今回のサンプルは、グローバル変数(固有)を使っていますので、受け渡しではなく、参照です。
             ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    受け渡しと参照とは違う意味です。

    局所変数の受け渡しは、ウィンドウのハンドル番号が必要ですので、初級者のレベルでは難易度が最大です。

    ちなみに、形の上では「受け渡し」ですが、実際には局所変数から局所変数への値の転送(代入)ですよ。

    > だけど、変数の受け渡し方法をまず考え理解します!
    > これは、私の中で結構なターニングポイントだと考えていて、これが理解出来れば
    > >モーダルフォーム(ダイアログボックス)は、変数を操作するだけに専念できる
    > >主ウィンドウでは、絞り込みに専念できる
    > これが実現出来る訳で、この考え方はかなり応用範囲が広いのじゃないかと、直感的に思っています(^^)/

    本当の意味での変数の値の受け渡しには、局所変数(または自動変数)を使います。

    これには、ウィンドウのハンドル番号が必要ですので、初級者のレベルでは難易度が最大です。

    しかし、どうしても試したいというのであれば、INF_Framework をフォームに導入してください。

    そして、あこめの桐のプログラミング入門のトップページから

      INF_Framework:局所変数の受け渡し

    を読んでください。

    そうすれば、局所変数を使った本当に変数の値の受け渡しが試せますよ。しかも超簡単に(^^♪

    > 上記の状況でしたので、返信が遅くなりました。
    > もうちょっと、粘ってみます!
    > どうしても答えが導き出せそうにない時は、SOSを出させてくださいm(__)m

    掲示板のやり取りには行き違いも生じます。

    論より証拠で、百聞は一見にしかずです。

    まず、当方のサンプルを動かしてみてください。

[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14371 ] / ▼[ 14380 ] ▼[ 14381 ] ▼[ 14384 ]
■14376 / 8階層)  Re[8]: モジュール化はフォームのレベルでも必要
□投稿者/ ジェダイの桐 -(2024/05/23(Thu) 13:53:28)
    ONnojiさん


    こんにちは!


    > 昔の掲示板には、格好は「フォーム+イベント処理」であっても、気持ちは一括処理の例が非常に多いのでよくよく吟味してくださいね。


    分かりました。
    これに関しては、もうどれを参考にしたかは分からなくなりましたが、
    具体的なプログラムは記載されていなかったんです。


    考え方として、主ウィンドウからモーダルフォームを開いて絞り込む手順がありますよ程度のアイデアを記載されていたと思います。


    今にして思えば、上級者通しのやり取りだった(少なからず、私より知識はある)
    ので、投稿者さんもそのアイデアでONnojiさんが提示してくれたサンプル
    (主ウィンドウ 絞り込み モーダルフォーム 変数操作)の手順で絞り込みを
    したんじゃないかと思います。


    その部分を私なりにやった結果が、あのやり方だったんです・・・


    >>そのフォームを初めて立ち上げる時に読み込んで使用する感じなのでしょうか??
    >>ここは直ぐに分からない(理解出来ない)ので一旦置いていて、
    > >>1.固有変数(または共通変数)でモーダル側でも値が参照できるようにして
    > >>2.固有変数(または共通変数)で終了状態( &gAnser )も受取る
    > >>3.もし、終了状態( &gAnser )がOK(1)なら実行
    >
    > 百聞は一見にしかずですからサンプルを動かしてください。


    cmd期間指定絞込 を押す前はフォームの変数管理の固有変数は無いですが、
    押した後は 変数管理画面に固有変数が現れました。


    名札 メイン に固有変数を宣言して、使用したら変数管理画面に出てくるんですね(^^♪


    > これには、ウィンドウのハンドル番号が必要ですので、初級者のレベルでは難易度が最大です。
    >
    > しかし、どうしても試したいというのであれば、INF_Framework をフォームに導入してください。
    >
    > そして、あこめの桐のプログラミング入門のトップページから
    >
    >   INF_Framework:局所変数の受け渡し
    >
    > を読んでください。
    >
    > そうすれば、局所変数を使った本当に変数の値の受け渡しが試せますよ。しかも超簡単に(^^♪


    そもそもなのですが、主ウィンドウ から モーダルフォームを呼び出して絞り込みをするなんて事はやりたくないのです。


    今回は日時の範囲を指定して絞り込みをしたかったのですが、
    桐の表に慣れている人なら 絞り込み:比較式で
    D"24/4/1"≦[]≦D"24/4/30" とか D"24/4/1"≦[]≦#月末(D"24/4/1")
    とか使って絞り込めばいいだけです。


    じゃあ何故 主ウィンドウ から モーダルフォーム 方式に挑戦したかと言えば、桐を初めて使用する人が 日付の範囲絞り込みが難しいとの事だったので、
    絞り込み開始日 と 絞り込み終了日 を入力して絞り込む 方法をやってみたのです。


    桐を初めて使用する人の評価は 使いやすい との事でした。


    だけど、桐に慣れてきたら このやり方は面倒になってくるんじゃないかな??
    と思っています。
    その時に 絞り込み:比較式 の方法を伝えようと思っています(^^)/


    > まず、当方のサンプルを動かしてみてください。


    私がやりたかった事が、正に実現出来ました。
    期間指定絞込.wfx にある cmdok の 実行条件に
    ( &gRefinementStartDate <= &gRefinementEndDate ) があるので、
    24/4/1 から 24/3/1 と入力した場合はそもそも okボタンが押せない


    思い通りの日付が入力されたら
    主ウィンドウに戻り(期間指定絞込.wfxが閉じられ)絞り込みを実行するか しないかをメッセージボックスで問う


    とにかく分かりやすかったです。


    まさやんさんの #日数 という関数も知らなかったですし
    AKさんに教えて貰った 実行条件 も知らなかったです。


    ONnojiさんに作成して頂いた、サンプルも凄く勉強になりました。


    本当にありがとうございましたm(__)m

解決済み!
[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14376 ] / 返信無し
■14380 / 9階層)  Re[9]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/23(Thu) 16:26:47)
    2024/05/23(Thu) 17:13:39 編集(投稿者)
    2024/05/23(Thu) 16:33:06 編集(投稿者)

    > そもそもなのですが、主ウィンドウ から モーダルフォームを呼び出して絞り込みをするなんて事はやりたくないのです。
    >
    > 今回は日時の範囲を指定して絞り込みをしたかったのですが、
    > 桐の表に慣れている人なら 絞り込み:比較式で
    > D"24/4/1"≦[]≦D"24/4/30" とか D"24/4/1"≦[]≦#月末(D"24/4/1")
    > とか使って絞り込めばいいだけです。
    >
    > じゃあ何故 主ウィンドウ から モーダルフォーム 方式に挑戦したかと言えば、桐を初めて使用する人が 日付の範囲絞り込みが難しいとの事だったので、
    > 絞り込み開始日 と 絞り込み終了日 を入力して絞り込む 方法をやってみたのです。
    >
    > 桐を初めて使用する人の評価は 使いやすい との事でした。
    >
    > だけど、桐に慣れてきたら このやり方は面倒になってくるんじゃないかな??
    > と思っています。
    > その時に 絞り込み:比較式 の方法を伝えようと思っています(^^)/

    ジェダイの桐さん本人以外も使用するアプリケーションの場合には、桐に慣れていない人を基準にするべきですよ。

    桐に慣れていない人が、勉強して上達するなどと期待しない方がよろしいのではありませんか?

    だって、皆さん忙しいんですし、そもそも桐に興味がないのですから・・・

    エクセルを使っている人だって、周りのみんなが使っているから仕方なしにエクセルを使っているわけです。

    多くの人は、出来ればPCなんか使わないで済むといいと思っていますよ。

    > 私がやりたかった事が、正に実現出来ました。
    > 期間指定絞込.wfx にある cmdok の 実行条件に
    > ( &gRefinementStartDate <= &gRefinementEndDate ) があるので、
    > 24/4/1 から 24/3/1 と入力した場合はそもそも okボタンが押せない
    >
    > 思い通りの日付が入力されたら
    > 主ウィンドウに戻り(期間指定絞込.wfxが閉じられ)絞り込みを実行するか しないかをメッセージボックスで問う
    > とにかく分かりやすかったです。

    【モーダルフォームで [Esc]キーを推す事】

    モーダルフォームで [Esc]キーを押すとモーダルフォームは閉じられます。

    これはタイトルバーの[×]ボタンを押したのと同じです。

    ただし、今回のモーダルフォームでは、開始時実行コマンド:cmdStartup で訂正モードに遷移していますから、

    [Esc]キーを押すと表示モードに遷移して、もう一度 [Esc]キーを押すとモーダルフォームは閉じられます。

    【本当に必要なメッセージと不要なメッセージ】

    サンプルでは、デバッグ目的でメッセージボックスを表示していますが、

    特に else つまり、[OK]ボタン以外、つまり[キャンセル]・ボタン[×]ボタン・[Esc]キーを押すの場合には、

    メッセージボックスを出す必要はありませんよ。※デバッグ中を除く

    なぜならば、モーダルフォームを[キャンセル]・ボタン[×]ボタン・[Esc]キーを押した人は、

    作業の取り消しの意思を示したのですから、ご丁寧に"キャンセルしました〜(^^♪"なんて表示するのは手間を増やすだけの余計なお節介です。
    ・・・・・・・・・・・・・・          ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    お節介なメッセージが欲しいのは開発者がテストをしている時だけです。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    なので、実際に運用する時には、 else 側のメッセ―ボックスは表示されないようにコメントアウトしてください。

    p.s.

    >>昔の掲示板には、格好は「フォーム+イベント処理」であっても、気持ちは一括処理の例が非常に多いのでよくよく吟味してくださいね。
    > 分かりました。
    > これに関しては、もうどれを参考にしたかは分からなくなりましたが、
    > 具体的なプログラムは記載されていなかったんです。
    > 考え方として、主ウィンドウからモーダルフォームを開いて絞り込む手順がありますよ程度のアイデアを記載されていたと思います。

    最初に見せていただいたものは、それにしてもスゴイ作例でしたね。

    見た瞬間に、ほとんど気絶しそうでしたよ。( 一一)

    当方は小旅行中だったのでスマホしか使えませんでした。

    そのうち「解決済み」になっちゃったので気にしていなかったのですが、家に戻って拝見したらびっくり仰天でした。

    今回、「イベント駆動(イベントドリブン)」の「フォーム+イベント処理」を、

    「ピタゴラスイッチやドミノ倒しのようにソフトウェアを作るということ」に例えました。

    ご存じのように、ピタゴラスイッチやドミノ倒しでは、あるきっかけによって、連続的に動作が継続するという仕掛けです。

    「イベント駆動型(イベントドリブン)」では、これらの仕掛けを必要な数だけ用意するということになります。

    従って制御の主体は、ソフトウェアの仕掛けということになりますね。

    ソフトウェアの仕掛けを複数個用意するというのですから、まずフォームの機能に眼を向けてください。

    例えば、コマンドボタンの機能や、モーダルフォームの機能です。

    ということで、コマンド(メソッドを含む)の方の知識は後回しでいいのです。

    「フォーム+イベント処理」が上手にできないという人の場合には、

    長年一括処理を使用していたために、桐言語のコマンドに精通しているのですが、

    フォームの属性やコマンドボタンの機能に無関心で無知な場合なのです。※こういう人は、プログラムはコマンドで作るものだと漠然と思っているのです
    ・・・・・・・・・・・・・・・・・・・・・・・・・

    だって、フォームの事を何も知らないのですから、ピタゴラスイッチやドミノ倒しのようにソフトウェアを作るということが出来るハズがないのです。
        ・・・・・・・・・・・・・      ・・・・・・・・・・・・・・・・・・・・・・・・・・・

     今回のピタゴラスイッチ(ソフトウェアの仕掛け)

      日付絞り込み.wfx

      オブジェクト名: cmd期間指定絞込
      標題     : 期間指定絞込

       機能名      機能パラメータリスト
      1 表示
      2 なし       #代入( &gRefinementStartDate, [日付] ), #代入( &gRefinementEndDate, [日付] )
      3 モーダルフォーム "期間指定絞込.wfx"
                  │
                  └ 期間指定絞込.wfx

                    オブジェクト名: cmdOK
                    標題     : OK

                    機能名   機能パラメータリスト
                    1 実行条件  ( &gRefinementStartDate <= &gRefinementEndDate )
                    2 なし    #代入( &gAnswer, 1 )
                    3 閉じる
                     │
      ┌──────────────┘
      │
      4 手続き実行    cmd期間指定絞込Click
                  ↓
                  ↓
                手続き定義開始 cmd期間指定絞込Click( )
                 変数宣言 自動,文字列{ &title = "cmd期間指定絞込Click( )", &msg }
                  :
                  :
                手続き定義終了


     ※最初のうちは、↑上のような図(ダイアグラム)を書いてみるといいですよ。慣れれば頭の中でイメージできるようになります。


[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14376 ] / ▼[ 14386 ]
■14381 / 9階層)  Re[9]: モジュール化はフォームのレベルでも必要
□投稿者/ AK -(2024/05/23(Thu) 17:15:06)
    2024/05/26(Sun) 18:00:40 編集(投稿者)

    ジェダイの桐さんへ

    解決済み後に申し訳ないですが・・・。

    職場で色々試行錯誤されてご苦労されているのでしょうか?

    またまた本当に余計なお世話ですが、私の紆余曲折失敗した経験からお伝えします。


    ONnojiさんもおっしゃっているようにネット上の情報、ファイル、サンプルなどは玉石混合で参考になるものもあれば、参考にならないものがあります。

    しかも残念ながら、参考にならない(してはいけない)情報がほとんどではないでしょうか?

    これは何も桐だけに限った話ではないと思います。

    私は書店に行くたびにExcelVBAの参考書を立ち読みしますが、VBA初心者レベルの私が

    「これだ!わかりやすい!これは良書だ!」という書籍はこの10年間でわずか1冊です。

    実際にお金を払ってもよいと思える参考書でさえ、こんな感じですのでネットの情報は疑ってかかったほうが良いと思います。

    私も幾度となく間違った情報を読み漁って失敗しました。

    特にオブジェクト指向プログラミングの考え方についてはその最たる例でした。

    今回のやり取りを拝見しましたが、まずは自力でフォーム+イベント処理を作り上げたほうが良いと思います。

    これは当然簡単なものからでよいです。


    ONnojiさんのHPは難しいと感じるかもしれませんが私が知りうる限りではイベント処理の勉強では間違いなく一番参考になると思います。

    同様にAkomeさんのHPも参考になると思います。

    ぜひ見よう見真似をした上で自力で作成してみてください。

    私も10数年前にONnojiさんの当時のHPを参考にして、見よう見まねで三角形の面積計算のイベント処理から作成していきました。

    今でも自分で作ったサンプルファイルは大事にPCに保存しています。

    最初はすぐに頭が混乱してしまい人が作ったものを読むのは少しできましたが、自分の頭で考えると途端に頭がパンクしていました・・・。

    しかし繰り返し作っていって慣れてくれば、いづれ「今度はこうしたい!」という意欲がわいてきてドンドン上達すると思います。

    初心者、初級者はこの繰り返しの実践しかありません。

    そして今回のような要求に耐えうる知識と技術が少しずつ身につくと思います。

    私も当時はかなり苦労しましたが、幸いにして色々ご指導いただいたおかげで業務で必要なレベルは自前で作って修正や拡張ができるようになりました。

    当然人様に見せられるほどのレベルではありませんが・・・T_T


    お伝えしたいことは色々ありますが、最後に私なりに今回感じたことです。

    せっかくイベント処理の勉強を始められていますので、難しいかもしれませんが是非頑張って習得することをお勧めします。^^

    私はある程度習得できて業務の幅も広がり、併せて桐を通じてPCの難しさも経験しました。

    次回は一から自作されたフォームとイベントファイルの質問を拝見させていただければなぁと勝手に思っております。^^
[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14381 ] / ▼[ 14407 ]
■14386 / 10階層)  Re[10]: モジュール化はフォームのレベルでも必要
□投稿者/ ジェダイの桐 -(2024/05/24(Fri) 09:37:14)
    AKさん


    おはようございます!


    > ONnojiさんのHPは難しいと感じるかもしれませんが私が知りうる限りではイベント処理の勉強では間違いなく一番参考になると思います。
    > 同様にAkomeさんのHPも参考になると思います。
    > ぜひ見よう見真似をした上で自力で作成してみてください。


    今回の件で、本当の意味で理解出来た事があります。
    それは、切羽詰まらない(必要に迫られない)と真剣なつもりなんだなぁって事です。


    ONnojiさんのホームページを何回も読んでいるのですが、
    フォームアプリケーション教書 第1部 9.2 に実行条件の事が書いてあります。
    具体的な使用方法は今回学べたのですが、ヒントが既に提示されているんですよね・・・


    正に読んだつもり状態ですよね。(ヤレヤレです(T_T))


    > しかし繰り返し作っていって慣れてくれば、いづれ「今度はこうしたい!」という意欲がわいてきてドンドン上達すると思います。
    > 初心者、初級者はこの繰り返しの実践しかありません。
    > そして今回のような要求に耐えうる知識と技術が少しずつ身につくと思います。


    取り組み続けていきますね!
    (実際、桐のプログラム(仕掛け)を考えるのは楽しいですし、上手くいった時は嬉しいです(^^)/)


    > 次回は一から自作されたフォームとイベントファイルの質問を拝見させていただければなぁと勝手に思っております。^^


    はい!
    その時が来ましたら、助言の程よろしくお願いしますm(__)m


[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14386 ] / 返信無し
■14407 / 11階層)  Re[11]: モジュール化はフォームのレベルでも必要
□投稿者/ ななーし -(2024/05/28(Tue) 16:08:35)
    ジェダイの桐さんこんにちは。

    たしかにONnojiさんのサイトはわかりやすいです。
    ただ、かなり丁寧な書き方をしてもらっていることもあり、
    少し詰まるとわからない感じがしてくるということがありました。
    詰まった原因は言葉のニュアンス理解ですね。どういう意味だろう?がわからなかったことがあり、桐をベースなので桐を見ながら紐解きしてました。

    超初心者クラスのフォームベースの作成ではOK,キャンセルと
    少しのイベント処理がわかればいいので桐のサンプルを分解して確認してみると参考になると思います。(桐のサンプルもゴテゴテしてはいるんですけどね(笑)シンプルすぎるのと難しいの中間くらいのものが欲しかったがわがままだと思うので割愛

    サンプルでこれわからない!ってなったらONnojiさんのサイトを見るとめちゃくちゃわかります。参考にしてみてください。
[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14376 ] / 返信無し
■14384 / 9階層)  Re[9]: モジュール化はフォームのレベルでも必要
□投稿者/ まさやん -(2024/05/23(Thu) 20:28:09)
    ジェダイの桐さん

    > まさやんさんの #日数 という関数も知らなかったですし

    原始的な方法書いちゃいましてすみませんでした。

    イベント 発展途上人で 私も勉強になりました。
    ありがとうございます。
[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14370 ] / 返信無し
■14373 / 7階層)  Re[7]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/22(Wed) 23:34:46)

    添付した"期間指定絞込.wfx"はチャイルド形式のフォームですが、

    モーダルフォームとして開くと、桐が自動的にポップアップ形式で表示します。

    そして、ポップアップ形式で表示された時に、タイトルバーの下にメニューバーが表示されます。

    メニューバーはポップアップの時にしか表示されませんので、

    もしも、邪魔な場合には、※余計な操作が出来ちゃうので結構邪魔なんですよ。アッハアha(^^ゞ

    フォームのオブジェクトの属性の[フォーム]タブの[メニューバー]のチェックをオフにしてください。

    ※添付画像を参照
919×453 => 250×123

1716388486.jpg
/73KB
[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14370 ] / ▼[ 14387 ]
■14385 / 7階層)  Re[7]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/23(Thu) 22:57:26)
    2024/05/24(Fri) 00:21:18 編集(投稿者)
    2024/05/23(Thu) 23:57:06 編集(投稿者)

    今回の質問のゴールであるポップアップウィンドウ(モーダルフォーム)で開始日時と終了日時を指定して、

    呼び出し元のフォームの編集対象表のレコードを絞り込むという目的は達成できましたね。パチパチパチ (^^v♪

    今回もですが、Win桐の「フォーム+イベント処理」にしても(エクセルのVBAにしてもですが)、つくづく思いましたが初級者には難しいですね。

    これは自動車の運転と同じですね。※自動車の免許を持っていない人は初めて自転車に乗る時を思い出してください。

    当然ですが、誰でも最初から自動車を自由自在に運転できるワケではありませんよね。

    同じく、当然ですが、誰でも最初からジェット旅客機のパイロットになれるワケではありませんよね。

    だから、最初から自分が何でも出来ると思うのは誤りですね。

    つまり、どんな事でも、少しづつ経験を積み重ねていかなければ一人前にはならないものなのですよね。

    これって、会社の仕事もしかりで何にでも当てはまりますよね。

    もしも、「フォーム+イベント処理」を上達したいと志すのであれば、経験をたくさん積んでください。

    きっと、AKさんもその事をを伝えたかったのだと思いますよ。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    桐の「フォーム+イベント処理」では、内容にもよりますが、マイクロソフト社のVBやC#で作成したアプリケーションと遜色の無いくらいのアプリケーションが作れますよ。

    こんなにも、簡単にお手軽にアプリケーションが作れるのに放って置くのは勿体ないと思いませんか?

    いま流行の、「きんとん雲」より少しだけ手間が掛かりますが、「痒いところに細かに手が届く」アプリケーションが作れるのはWin桐くらいかと思いますよ。

    私( ONnoji )は、Win桐をアプリケーション開発のプラットフォームだと発信してきました。

    だから、Win桐でアプリケーションを開発する人は、もっともっともっと自信を持っていただきたいのでありますゾ!。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    ジェダイの桐さんの質問投稿を読むと、AKさんもですが私( ONnoji )も自分自身の昔の姿を思い起こしてしまうのですよ、

    だから、気になって仕方が無いのですね。アハハha

    というわけで、毎回のようにツリーが膨張してごめんなさいね。(^^ゞ > 【多遊】さん

    p.s.

    元々は人工知能を批判する哲学者が提唱したものですが・・・

    「ドレイファスモデル」という超有名な学習に関するモデルがあります。

    是非、お読みください。※随分昔に私( ONnoji )はアスキー刊の[純粋人工知能批判( 原題:Mind Over Machine )を読んで感銘を受けましたよ。


    こちら
     ↓
    ドレイファスモデルとは何か?技能の5段階と各段階にあわせた対応方法を解説 | Promapedia(プロマペディア)
    https://ssaits.jp/promapedia/method/dreyfus_model.html


    ドレイファスモデル:直観力の習得 &#8211; アイ&カンパニー
    https://iandco.jp/ex/dreyfus/

    > ドレイファスモデル:直観力の習得
    >
    > 1. 初心者、Novice :経験がほとんどない
    >
    > 2. 中級者、Advanced beginner :自分だけでは問題解決にてこずる
    >
    > 3. 上級者、Competent :自分で問題解決できる
    >
    > 4. 熟練者、Proficient :自分で学び成長することができる
    >
    > 5. 達人、Expert :直観で行動できる


    ちなみに、現在では「パトリシア・ベナーの看護理論」の方が有名かもしれませんが、内容は同じですよ。

[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14385 ] / ▼[ 14393 ]
■14387 / 8階層)  Re[8]: モジュール化はフォームのレベルでも必要
□投稿者/ ジェダイの桐 -(2024/05/24(Fri) 10:12:41)
    ONnojiさん


    おはようございます!


    > 今回の質問のゴールであるポップアップウィンドウ(モーダルフォーム)で開始日時と終了日時を指定して、
    >
    > 呼び出し元のフォームの編集対象表のレコードを絞り込むという目的は達成できましたね。パチパチパチ (^^v♪


    本当に嬉しいです!
    ありがとうございましたm(__)m
    桐に不慣れな人も喜んでいます。喜んで貰える設計(構造)に助言を貰いながら作成出来た事も嬉しいです!


    > つまり、どんな事でも、少しづつ経験を積み重ねていかなければ一人前にはならないものなのですよね。
    >
    > これって、会社の仕事もしかりで何にでも当てはまりますよね。
    >
    > もしも、「フォーム+イベント処理」を上達したいと志すのであれば、経験をたくさん積んでください。

    > きっと、AKさんもその事をを伝えたかったのだと思いますよ。


    > ジェダイの桐さんの質問投稿を読むと、AKさんもですが私( ONnoji )も自分自身の昔の姿を思い起こしてしまうのですよ、
    >
    > だから、気になって仕方が無いのですね。アハハha


    私は幸せ者です。
    だって、色んな人に気にかけて貰えているのですから。
    ありがとうございます!


    図(ダイアグラム)を書いて、やりたい事を定める事を習慣づけます。


    シンプルなのに、やりたい事が実現でき 且つ 分かりやすい。
    サンプル作成頂いたアプローチが衝撃的でした。


    コマンドボタンの機能 モーダルフォームの機能を見定める。
    コマンドボタンの機能(使い方)の認識が変わりました。
    これが凄く重要ですね。
    今回の件で良く分かりました。


    > こちら
    >  ↓
    > ドレイファスモデルとは何か?技能の5段階と各段階にあわせた対応方法を解説 | Promapedia(プロマペディア)
    > https://ssaits.jp/promapedia/method/dreyfus_model.html
    >
    >
    > ドレイファスモデル:直観力の習得 &#8211; アイ&カンパニー
    > https://iandco.jp/ex/dreyfus/
    >
    >>ドレイファスモデル:直観力の習得
    >>
    >>1. 初心者、Novice :経験がほとんどない
    >>
    >>2. 中級者、Advanced beginner :自分だけでは問題解決にてこずる
    >>
    >>3. 上級者、Competent :自分で問題解決できる
    >>
    >>4. 熟練者、Proficient :自分で学び成長することができる
    >>
    >>5. 達人、Expert :直観で行動できる


    この記事を読んでいきます!
    教えて頂きありがとうございます!


    p.s.


    >【本当に必要なメッセージと不要なメッセージ】

    >サンプルでは、デバッグ目的でメッセージボックスを表示していますが、

    >特に else つまり、[OK]ボタン以外、つまり[キャンセル]・ボタン[×]ボタン・[Esc]キーを押すの場合には、

    >メッセージボックスを出す必要はありませんよ。※デバッグ中を除く

    >なぜならば、モーダルフォームを[キャンセル]・ボタン[×]ボタン・[Esc]キーを押した人は、

    >作業の取り消しの意思を示したのですから、ご丁寧に"キャンセルしました〜(^^♪"なんて表示するのは手間を増やすだけの余計なお節介です。
    >・・・・・・・・・・・・・・          ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    >お節介なメッセージが欲しいのは開発者がテストをしている時だけです。
    >・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    >なので、実際に運用する時には、 else 側のメッセ―ボックスは表示されないようにコメントアウトしてください。


    ずっと不思議な事がありました。
    あこめさんの入門講座 Chapter4 でメッセージボックスが出てきます。


    ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇

    else
     確認 "中止しました"

    キャンセルした際の表示なので、実際に稼働している時には不要でしょう。
    ここではメッセージボックスが動作したかどうかのデバック用に設定したわけです。

    ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇


    と、解説が出てきます。
    私としては、せっかく作ったのに何故不要なんだろう??
    と思っていた訳ですが、ONnojiさんのコメントで解決しました!


    今なら、意味が理解出来ますし "キャンセルしました" は作業者にとって煩わしいですね。


[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/

▲[ 14387 ] / 返信無し
■14393 / 9階層)  Re[9]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/26(Sun) 16:15:44)
    2024/05/26(Sun) 16:38:46 編集(投稿者)

    コマンドボタンの機能名の種類がたくさんあるので、一覧表の形式よりもWBSの形式の方が見やすそうです。

    試しにこんな感じで作ってみました。

    ご参考になれば。

    1 コマンドボタン

    ├ 1.1 ファイル
    │ ├ 1.1.1 閉じる
    │ ├ 1.1.2 上書き保存
    │ ├ 1.1.3 開く
    │ ├ 1.1.4 表整理
    │ ├ 1.1.5 結合表の再抽出
    │ ├ 1.1.6 読み込み_表
    │ ├ 1.1.7 読み込み_テキスト
    │ ├ 1.1.8 読み込み_K3
    │ ├ 1.1.9 読み込み_CSV
    │ ├ 1.1.10 読み込み_PDF
    │ ├ 1.1.11 書き出し_表
    │ ├ 1.1.12 書き出し_テキスト
    │ ├ 1.1.13 書き出し_K3
    │ ├ 1.1.14 書き出し_CSV
    │ ├ 1.1.15 書き出し_転置
    │ ├ 1.1.16 書き出し_表の枠組み
    │ ├ 1.1.17 書き出し_外部データベース
    │ ├ 1.1.18 併合
    │ ├ 1.1.19 一覧表印刷
    │ └ 1.1.20 レポート印刷

    ├ 1.2 編集
    │ ├ 1.2.1 訂正
    │ ├ 1.2.2 表示/訂正
    │ ├ 1.2.3 表示
    │ ├ 1.2.4 ジャンプ
    │ ├ 1.2.5 フォーカス移動
    │ ├ 1.2.6 検索_条件名
    │ ├ 1.2.7 検索_比較式
    │ ├ 1.2.8 検索_値
    │ ├ 1.2.9 次を検索
    │ ├ 1.2.10 前を検索
    │ ├ 1.2.11 次を検索_比較式
    │ ├ 1.2.12 前を検索_比較式
    │ ├ 1.2.13 項目置換
    │ ├ 1.2.14 置換_条件名
    │ ├ 1.2.15 元に戻す
    │ ├ 1.2.16 削除
    │ └ 1.2.17 すべて選択

    ├ 1.3 クリップボード
    │ ├ 1.3.1 コピー
    │ ├ 1.3.2 切り取り
    │ └ 1.3.3 貼り付け

    ├ 1.4 表示
    │ ├ 1.4.1 ズームイン
    │ ├ 1.4.2 ズームアウト
    │ ├ 1.4.3 表編集へ
    │ ├ 1.4.4 フォームの選択
    │ ├ 1.4.5 削除行
    │ └ 1.4.6 スラッシュメニュー

    ├ 1.5 行操作
    │ ├ 1.5.1 行挿入
    │ ├ 1.5.2 行追加
    │ ├ 1.5.3 行削除_指定行
    │ ├ 1.5.4 行削除_全行
    │ ├ 1.5.5 行復活_指定行
    │ ├ 1.5.6 行復活_全行
    │ ├ 1.5.7 レコードロック_指定行
    │ ├ 1.5.8 レコードロック_現在行
    │ ├ 1.5.9 ロック解除_全行
    │ ├ 1.5.10 絞り込み_条件名
    │ ├ 1.5.11 絞り込み_比較式
    │ ├ 1.5.12 絞り込み_値
    │ ├ 1.5.13 絞り込み_指定行
    │ ├ 1.5.14 絞り込み_単一化
    │ ├ 1.5.15 絞り込み_重複行
    │ ├ 1.5.16 絞り込み_行数
    │ ├ 1.5.17 絞り込み_同一値
    │ ├ 1.5.18 補集合
    │ ├ 1.5.19 並べ替え_条件名
    │ ├ 1.5.20 並べ替え_昇順
    │ ├ 1.5.21 並べ替え_降順
    │ ├ 1.5.22 絞り込み_解除
    │ ├ 1.5.23 解除
    │ ├ 1.5.24 グループ指定
    │ ├ 1.5.25 グループ検索
    │ ├ 1.5.26 グループ値訂正
    │ ├ 1.5.27 グループ追加
    │ ├ 1.5.28 グループ再抽出
    │ └ 1.5.29 グループ解除

    ├ 1.6 入力
    │ ├ 1.6.1 直前値
    │ ├ 1.6.2 直前行
    │ └ 1.6.3 値複写

    ├ 1.7 ウィンドウ
    │ ├ 1.7.1 多重化_表編集
    │ └ 1.7.2 多重化_フォーム編集

    ├ 1.8 Webビュー ※桐sSLで新しく追加されたグループ
    │ ├ 1.8.1 戻る
    │ ├ 1.8.2 進む
    │ ├ 1.8.3 更新
    │ ├ 1.8.4 ホーム
    │ └ 1.8.5 URL取得

    ├ 1.9 手続き実行
    │ └ 1.9.1 手続き実行

    ├ 1.10 その他
    │ ├ 1.10.1 再生
    │ ├ 1.10.2 状況依存ヘルプ
    │ ├ 1.10.3 モーダルフォーム
    │ ├ 1.10.4 ファイル名入力
    │ ├ 1.10.5 編集制御
    │ ├ 1.10.6 シェル実行
    │ ├ 1.10.7 実行条件
    │ ├ 1.10.8 一括処理へ戻る ※「フォーム+イベント処理」では使用しません
    │ └ 1.10.9 桐の終了

    └ 1.11 なし
      └ 1.11.1 なし

[ 親 14350 / □ Tree ] 返信 [メール受信/OFF] 削除キー/


Mode/  Pass/

HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -