過去の桐井戸端BBS (桐ver.9)
19799 イベントで処理を中止したいときの記述のしかたを教えてください。 katsuyoshi 2003/04/09-01:00
フォームのイベントで次のような記述をしました。
----------------------------------------------------------------------
手続き定義開始 t本契約日::入力後(参照 文字列 &編集文字列,長整数 &モード,参照 長整数 &入力継続)
 if ([本契約日]="")
   メッセージボックス "入力エラー","本契約日が入力されていません。再入力してください。",アイコン=!,ボタン指定=2
   &入力継続 = 1
 end
手続き定義終了
----------------------------------------------------------------------
"本契約日"が未入力の時、再度入力を促す手続きで、未入力の場合ボタン指定で"OK"と"キャンセル"が出ます。

やりたいこと
 @ "OK"ボタンが押されたら再度入力するようにする。
     これは「&入力継続 = 1」で実現出来ました。
 A "キャンセル"ボタンが押されたらメッセージボックスに確認メッセージとして"処理を中止しレコードを削除します。"
     を表示してそのレコードを行削除する。
 
Aの手続きについて記述方法を教えてください。 
19801 Re:イベントで処理中止の記述について 今村 誠 2003/04/09-08:33
記事番号19799へのコメント
かつよしさんこんにちは
a)> if ([本契約日]="")
> 1) "OK"ボタンが押されたら再度入力するようにする。
>     これは「&入力継続 = 1」で実現出来ました。

ここはa)だったので入力継続しているので1)だからではありません。
未入力も許可する場合は、ソース値更新イベントを使い
結果に応じて場合分けした方がいいのではないでしょうか。
コマンドボタンをメソッドで実行するなどして見てはいかがでしょうか。
機能   パラメーター
1表示  破棄する
19804 Re:イベントで処理中止の記述について 悲しげ 2003/04/09-10:38
記事番号19799へのコメント
どもっ、katsuyoshiさん
私がやるとすれば次のような感じでしょうか。

別途、手続き定義を呼び出すことにする。
呼び出す引き金は、次のふたつから(共用させる)
1)「t本契約日」の「ソース値更新」イベント
2)仮称「契約確定」牡丹
 (牡丹の機能名=手続き実行、同パラ=契約確定)
----------------------------------------------------------------------
手続き定義開始 契約確定()
 if ([本契約日]="")
  msgbox "本契約日未入力!","[OK]で再入力  [キャンセル]で中止削除" \
  ,アイコン=!,ボタン指定=2,&msg
  if(&msg<>1)
   確認 "この行を削除しますよ?",&msg
   if(&msg=1)
    method @フォーム.更新モード設定(0)
    行削除
    /*または method @b機能が1:表示,2:行削除である牡丹.実行() */
   end
  else
   *----この部分は不要かもしれない(未確認)
   method @t本契約日.フォーカス設定()
   method @フォーム.更新モード設定(2)
  end
  手続き終了 /*ともかく本契約日項目が空の場合は次に進まない*/
 end
 *----それ以外の時として、ここ以降にやりたい処理を記述する
 ・・・・・
手続き定義終了
----------------------------------------------------------------------
(ただし挙動未確認)

19806 No.19804の補足 悲しげ 2003/04/09-10:48
記事番号19804へのコメント
1)「t本契約日」の「ソース値更新」イベント
    手続き実行 契約確定()         ←この記述を忘れてました
2)仮称「契約確定」牡丹
   (牡丹の機能名=手続き実行、同パラ=契約確定)

19815 Re:No.19804の補足 今村 誠 2003/04/09-12:56
記事番号19806へのコメント
悲しげさんこんにちは
>2)"キャンセル"ボタンが押されたらメッセージボックスに確認メッセージとし
> て"処理を中止しレコードを削除します。"を表示してそのレコードを行削除
>  する。
希望が取り消しでなく行削除だから、悲しげさんの
>  /*または method @b機能が1:表示,2:行削除である牡丹.実行() */
の方がいいですね。
途中まで入力しているなら復活できる方がいいかもしれません。

19817 好みとしては 悲しげ 2003/04/09-13:27
記事番号19815へのコメント
本当は私は「空ならば削除」と云う判断はあまり好きではありません。(^^;)
空ではなくて(あるいは空も含めて)、入力値がそれでいいかどうかを確認させる過程で、
確定実行or再入力or中止削除という組み立て方にしたいところです、私の好みとしてはね。

19891 Re:イベントで処理中止の記述について katsuyoshi 2003/04/13-12:41
記事番号19799へのコメント
今村さん、悲しげさんありがとうございました。
レスが遅くなり申し訳ありませんでした。
頑張って勉強しました結果を報告します。
基本が理解できないもので時間がかかりました。

手続き定義開始 入力確定()
 if([本契約日]="")
   msgbox "本契約日未入力!","[OK]で再入力 [キャンセル]で中止削除",アイコン=!,ボタン指定=2,&msg
   if(&msg<>1)
     確認 "この行を削除します",&msg
    if(&msg=1)
      method @フォーム.更新モード設定(0)
       行削除
     method @t推進No.フォーカス設定()
      method @フォーム.更新モード設定(2)
    end
    else
     method @t本契約日.フォーカス設定()
      method @フォーム.更新モード設定(2)
     end
      end
手続き定義終了

上記でうまく行きましたが疑問がひとつ残りました。

行削除が終了した後で
    method @t推進No.フォーカス設定()
      method @フォーム.更新モード設定(2)
で[推進No]を編集モードにしたいのですがフォーカスは行くのですが表示モードの
ままです。
これはなぜなんでしょうか。
教えてください。
19897 Re:イベントで処理中止の記述について 今村 誠 2003/04/14-00:57
記事番号19891へのコメント
katsuyoshiさんこんにちは
>で[推進No]を編集モードにしたいのですがフォーカスは行くのですが表示モードの
>ままです。
>これはなぜなんでしょうか。
>教えてください。
削除したので終端行に行が移動したかもしれません。
終端行は訂正できないので自動で表示になるなら都合いいように思います。
どうしても訂正にしたいなら、ジャンプで前行にする。
でも編集した行とは違うので、その行は訂正する必要は無いと思います。
削除したら「表示」、再入力は「訂正」がいいと思います。
削除後ジャンプするかしないかは、katsuyoshiさんでないと解らない。
19898 Re:イベントで処理中止の記述について 桐野港 2003/04/14-02:03
記事番号19891へのコメント
katsuyoshiさん はじめまして
途中から割込みましてすみません。

>行削除が終了した後で
>    method @t推進No.フォーカス設定()
>      method @フォーム.更新モード設定(2)
>で[推進No]を編集モードにしたいのですがフォーカスは行くのですが表示モードの
>ままです。
>これはなぜなんでしょうか。
>教えてください。

これは行削除した為に処理対象行が終端行になった為で
終端行では  method @フォーム.更新モード設定(6)
で行追加を実行すれば解決すると思います。
しかし登録済データ訂正入力ではなく新規データ作成入力になりますが

行削除後に処理対象行がどこにあるか判断してたとえば
if(#eof)
  method @フォーム.更新モード設定(6)
else
  method @フォーム.更新モード設定(2)
end

でいけるんじゃないかと思います。

19901 Re:イベントで処理中止の記述について 悲しげ 2003/04/14-13:59
記事番号19897へのコメント
今村の仰るとおりです。
敢えていえば、行削除した後に即、訂正モードにすること自体には
むしろ反対します。

19937 Re:イベントで処理中止の記述について 桐野港 2003/04/15-00:35
記事番号19901へのコメント
悲しげさん いつぞやはお世話になりました。
諸先輩方と違った考えですみませんが行削除後に表示モードにするか編集モードにするかは
ケースバイケースでkatsuyoshiさんのデータ入力画面の目的次第と思います。

私はあえてフォーム入力画面で表示モードに変更できないように設定しているところもあります。
その方が入力の制御をコントロールしやすいケースもあり、表示モードになってもらっては都合が悪く、
表示モードにした時点で入力画面終了にした方が都合のよい場合もありです。

katsuyoshiさんの目的がわかりませんが、現在の入力行を入力途中で行削除して即新規データ入力開始または
次データ訂正の場合も大いにありと思います。ちなみに私の場合は大いにありです。

19938 ありがとうございました katsuyoshi 2003/04/15-02:15
記事番号19901へのコメント
悲しげさんありがとうございます・
たびたびのご指導に感謝、感謝です。
ご指導頂きながらこつこつと頑張っています。
日中なかなかできないことから返事が遅くなりがちで申し訳ありません。

>今村の仰るとおりです。
>敢えていえば、行削除した後に即、訂正モードにすること自体には
>むしろ反対します。
>
桐野港さんからご指導頂いたように
更新モード(6)に設定しましたら訂正モードになりましたが
訂正モードになった後すぐに入力中止をしたくなったとき
F4ボタン(表示)かESCボタンで表示状態に出来ますが
フォームにある コマンドボタン(閉じる)が押せなくなりました。
悲しげさん同様今村さんも言っておられるように行削除後は
表示モードがいいのかな
と考えるようになってきました。
もう少し考えます。
別ツリーでもう一個質問させて頂きますのでまたお願いします。
ありがとうございました。
19939 Re:イベントで処理中止の記述について katsuyoshi 2003/04/15-02:23
記事番号19897へのコメント
今村さんありがとうございました。

日中なかなかできないことから返事が遅くなりがちで申し訳ありません。

桐野港さんからご指導頂いたように
更新モード(6)に設定しましたら訂正モードになりましたが
訂正モードになった後すぐに入力中止をしたくなったとき
F4ボタン(表示)かESCボタンで表示状態に出来ますが
フォームにある コマンドボタン(閉じる)が押せなくなりました。

>削除したら「表示」、再入力は「訂正」がいいと思います。

悲しげさんも言っておられるように行削除後は表示モードがいいのかな
と考えるようになってきました。
もう少し考えます。

ありがとうございました。

19941 Re:イベントで処理中止の記述について katsuyoshi 2003/04/15-02:31
記事番号19898へのコメント
桐野港さんありがとうございました。

日中なかなかできないことから返事が遅くなり申し訳ありません。

ご指導頂いたように

  if(#eof)
    method @フォーム.更新モード設定(6)
  else
    method @フォーム.更新モード設定(2)
  end

で希望通り訂正モードになりましたが
訂正モードになった後すぐに入力中止をしたくなったとき
F4ボタン(表示)かESCボタンで表示状態に出来ますが
フォームにある コマンドボタン(閉じる)が押せなくなりました。
  機能名 閉じる
なぜかなと考えつつ行削除後は表示モードがいいのかなと考えてもいます。
結論はもう少し考えます。
ありがとうございました。

19944 Re:イベントで処理中止の記述について 幅田 2003/04/15-08:42
記事番号19941へのコメント
katsuyoshiさん
こんにちは。

>訂正モードになった後すぐに入力中止をしたくなったとき
>F4ボタン(表示)かESCボタンで表示状態に出来ますが
>フォームにある コマンドボタン(閉じる)が押せなくなりました。
>  機能名 閉じる
>なぜかなと考えつつ行削除後は表示モードがいいのかな
>と考えてもいます。

コマンドボタンの機能名の
1行目に「表示」で表示モードにしておいて、
2行目で「閉じる」
ではだめでしょうか?

私はよくこういう風にしてますけど・・

19947 Re:イベントで処理中止の記述について 悲しげ 2003/04/15-13:27
記事番号19937へのコメント
どもっ、桐野港さん

>行削除後に表示モードにするか編集モードにするかはケースバイケースで
>katsuyoshiさんのデータ入力画面の目的次第と思います。

それはもちろんそのとおりなのですが、かつよしさんが(別ツリーで)
以前からやろうとしていたことの一環としての今回の質問であろう、
との前提でのコメントでした。前提が違うかもしれないので、
確かに断定はちょっとアレですね。(^^;)

19952 Re:イベントで処理中止の記述について 悲しげ 2003/04/15-14:24
記事番号19944へのコメント
ちょっと幅田さんのコメントをお借りします。

はて?
行訂正中でも行追加(挿入)中でも、閉じる機能の牡丹は常に有効な筈です。
閉じる牡丹の機能で1行目とかに何か他のことを記述してませんか?

19962 Re:イベントで処理中止の記述について 桐野港 2003/04/15-23:20
記事番号19947へのコメント
悲しげさん こんばんは

>それはもちろんそのとおりなのですが、かつよしさんが(別ツリーで)
>以前からやろうとしていたことの一環としての今回の質問であろう、
>との前提でのコメントでした。

別ツリーからの関連でしたか。久しぶりに掲示板を見て以前自分なりに
試行錯誤した部分と似ていましたのでついカキコしてしまいました。f(^_^;

19964 Re:イベントで処理中止の記述について 悲しげ 2003/04/16-00:00
記事番号19901へのコメント
>今村の仰るとおりです。

読み返してみたら、敬称が抜けてました。(^^;)
今村さん、ごめんなさい。<(_ _)>

19965 Re:イベントで処理中止の記述について 桐野港 2003/04/16-00:46
記事番号19941へのコメント
>訂正モードになった後すぐに入力中止をしたくなったとき
>F4ボタン(表示)かESCボタンで表示状態に出来ますが
>フォームにある コマンドボタン(閉じる)が押せなくなりました。
>  機能名 閉じる

押せなくなるということは、訂正モード状態で押せないのでしょうか(表示状態では押せる)
それとも表示状態にしてから押せないのでしょうか?

フォームを開く時にフォームから開く時と CMDから開く時とでは
コマンドボタンの動きが違ってきますので、そのあたりの設定は大丈夫でしょうか?
CMDから開く場合コマンドボタンのオブジェクトの属性で 一括起動時有効 のチェックが入っていないと
コマンドボタンが機能しなくなります。
(フォームから開く場合はその反対)

閉じる機能だけのボタンはチェックが無くても一括起動時にも有効だったように思いますが、
そのあたりの設定を確認されてはどうかなと 思ったりしております。

19976 Re:(^_^) 今村 誠 2003/04/16-12:07
記事番号19964へのコメント
ども悲しげさんこんにちは(^_^)
>読み返してみたら、敬称が抜けてました。(^^;)
>今村さん、ごめんなさい。<(_ _)>

20006 ありがとうございました。 katsuyoshi 2003/04/17-13:07
記事番号19891へのコメント
お礼が遅くなり見てもらえるか少し心配です。
悲しげさん、今村さん、桐野港さん、幅田さんありがとうございました。
訂正モードにならないのは終端行にフォーカスが移動していました。
自分で自分の首を絞めるような複雑なことに挑戦していたように思えるようになりました。
身の程知らずなことはできるだけ避けて行こうと思います。
返事が遅くなり申し訳ありませんでした。
まだまだいろいろと悩みが出てくると思いますのでその節はご指導お願いします。
ありがとうございました。

戻る