過去の桐井戸端BBS (桐ver.9)
24820 未入力を不許可としたい katsuyoshi 2004/02/13-11:51
またお世話になります。
項目名:[本契約日] 日時型
本契約日が未入力の場合メッセージボックスでOK・キャンセルを表示し
OKボタンの押下は再入力をキャンセルボタンの押下はレコード編集を無効とさせたい。
先回の質問でキャンセルボタンの無効は出来ましたがOKボタンの再入力のイベント記述がうまく行きません。

手続き定義開始 t本契約日::ソース値更新()
 if([本契約日]="")
   msgbox "本契約日未入力!","[OK]で再入力 [キャンセル]で中止しま
す",アイコン=!,ボタン指定=2,&確認
   if(&確認=21)
     メソッド呼び出し @フォーム.更新モード設定(-1)
      メソッド呼び出し @t本契約日.フォーカス設定()
   else
     &入力継続=1
   end
 end
手続き定義終了

未入力でキャンセルは編集終了になりますがOKの場合は次項目にフォーカスが移動します。
移動させないで再入力させたいのですがお願いします。

24822 Re:未入力を不許可としたい 悲しげ 2004/02/13-12:59
記事番号24820へのコメント
>未入力でキャンセルは編集終了になりますがOKの場合は次項目にファーカスが
>移動します。移動させないで再入力させたいのですがお願いします。

これは(ソース値更新のところで)[Enter]キーを推したから次項目に進んでいるだけのことだと思います。
契約日項目がヌルなら、[Enter]だろうが[Esc]だろうがとにかくフォーカスをその場に留めたいことのようですから、
対策としては

手続き定義開始 t本契約日::ソース値更新()
 if([本契約日]="")
  msgbox "本契約日未入力!",・・・・
  if(&確認<>1)
   メソッド呼び出し @フォーム.更新モード設定(-1)
  else
   &入力継続=1
  end
  メソッド呼び出し @t本契約日.フォーカス設定()
 end
手続き定義終了

のような記述も可能です。
でも、発想を転換すれば、何かもっとスッキリしたやり方がありそうな気がしないでもありませんが(^^;)

24824 &入力継続 は「ソース値更新」イベントでは? 悲しげ 2004/02/13-13:31
記事番号24822へのコメント
>手続き定義開始 t本契約日::ソース値更新()
>   ・・・・・
>  else
>   &入力継続=1

うっかりだまされてしまいました。(^^;)
&入力継続 は「入力後」イベントでは利きますが、「ソース値更新」イベント
で利きましたっけ? (未検証)

24825 Re:&入力継続 は「ソース値更新」イベントでは? katsuyoshi 2004/02/13-13:47
記事番号24824へのコメント
悲しげさんいつもありがとうございます。
>>手続き定義開始 t本契約日::ソース値更新()
>>   ・・・・・
>>  else
>>   &入力継続=1
>
>うっかりだまされてしまいました。(^^;)
>&入力継続 は「入力後」イベントでは利きますが、「ソース値更新」イベント
>で利きましたっけ? (未検証)

その通りです。入力後イベントには&入力継続が使えますがソース値更新イベントでは使用不可のようです。
なんか根本を理解していないようです。ご迷惑をおかけしますが
ご指導をお願いします。

24827 Re:&入力継続 は「ソース値更新」イベントでは? 悲しげ 2004/02/13-14:27
記事番号24824へのコメント
引き続き未検証ながら(^^;)、&確認=1 の時は、
何もしないでフォーカスを動かないように指定するだけではどうなんでしょう?

手続き定義開始 t本契約日::ソース値更新()
 if([本契約日]="")
  msgbox "本契約日未入力!",・・・・
  条件(&確認<>1) メソッド呼び出し @フォーム.更新モード設定(-1)
  メソッド呼び出し @t本契約日.フォーカス設定()
 end
手続き定義終了

24828 Re:&入力継続 は「ソース値更新」イベントでは? アックン(=^・^=) 2004/02/13-14:34
記事番号24824へのコメント
悲しげさん>
ソース値更新イベントには、自動変数が用意されてないです。(^^;
入力後イベントとソース値更新イベントを組み合わせてみては?
ぼくは前スレの途中からよく読んでないもんで、何をしたいかわからないでーす。(^^;

24835 Re:未入力を不許可としたい 悲しげ 2004/02/13-16:13
記事番号24820へのコメント
あと未定義禁止と云うことでは、イベントを使わないで
表定義の項目属性/制約タブからも設定できます。

どちらがいいかは、色々試行してみて下さい。

24853 Re:未入力を不許可としたい katsuyoshi 2004/02/14-12:47
記事番号24835へのコメント
悲しげさんお世話様です。

>あと未定義禁止と云うことでは、イベントを使わないで
>表定義の項目属性/制約タブからも設定できます。
>
>どちらがいいかは、色々試行してみて下さい。
>
制約タブでの未定義禁止はレコードの編集が終了するときにメッセージが表示されますが
今回は入力時のメッセージ及び処理としたいのです。
以下のように考えましたが
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
手続き定義開始 t本契約日::ソース値更新()
 手続き実行 入力確定()
手続き定義終了

手続き定義開始 入力確定()
 if([本契約日]="")
   msgbox "本契約日未入力!","[OK]で再入力 [キャンセル]で中止
削除",アイコン=!,ボタン指定=2,&msg
   if(&msg<>1)
     確認 "この行を削除します",&msg
    if(&msg=1)
      method @フォーム.更新モード設定(0)
      行削除
  if(#eof)
    method @フォーム.更新モード設定(6)
  else
    method @フォーム.更新モード設定(2)
  end
    end
    else
     method @t本契約日.フォーカス設定()
      method @フォーム.更新モード設定(2)
     end
      end
手続き定義終了
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
OKボタンの押下ではフォーカスが移動せず再入力を促すようになりました
がキャンセルボタンで行削除処理で「KU1178:処理対象行がありません」のエラーメッセージが表示されます。
[本契約日]は最初に入力する項目なのでその項目が未入力ということは処理行が無いので当然とは思います。
そこでそのエラーメッセージがなく編集を無効にする方法を教えて下さい。
たびたび申し訳ありません。 お願いします。

24856 Re:未入力を不許可としたい 悲しげ 2004/02/14-17:33
記事番号24853へのコメント
え〜、#24809を再度ご熟読下さい。
#24801で「行削除」を勧めたのは佐田さんでして、私は#24809で
(本件に限っては)「行削除」に否定的な意見を述べています。
その後に、#24812でかつよしさんご自身がコメントを書いている
のでこの件は承知かと思っていましたが、読み落としですか?

24857 Re:未入力を不許可としたい 佐田 守弘 2004/02/14-18:18
記事番号24856へのコメント
katsuyoshiさん
悲しげさんが#24809で書いている様に、行挿入時にメソッド呼び出しで
更新モードを0(表示)に変更すると、行挿入自体が取り消されてしまうのが
本当の様ですね。機能名の表示を使って表示モードに移行するのとは違う様ですね。
勘違いしておりました。

従って、結論としては行削除コマンドを入れるのを止めれば良いと思います。

佐田守弘(KS-00119)
ps:
私は通常、新規データの追加の処理では、まず行挿入コマンドで1行の挿入と初期値設定を終えた後、
これを確定し、改めて行訂正に入っています。
(このため取り消しには行削除が必要になる)。
理由は、誤操作で途中までの入力を失う事がない様にするためです。
24860 Re:未入力を不許可としたい katsuyoshi 2004/02/14-21:08
記事番号24856へのコメント
悲しげさん申し訳ありません。
なんか前のツリーと混同しているようですが今回は別のものです。
No.24827でご指導頂いた記述で実証してみましたがキャンセル
(&確認<>1)のときはバッチリ希望通りでした。

OK(再入力をさせる=フォーカスは移動しないで編集状態にする)のとき
(&確認=1)の処理方法が解らなかったため以前に作成したイベントから行削除を持ってきました。

しかし以前のイベントの時は入力する順番が最後の項目でしたので
うまく動いてくれましたが今回は最初の項目なので処理対象行が
ありませんとエラー表示となりました。

よってNo.24693〜No.24812までのご指導は理解させて頂きました。

(&確認=1)の時の処理を教えて下さい。
OK(再入力をさせる=フォーカスは移動しないで編集状態のままにする)

24861 Re:未入力を不許可としたい katsuyoshi 2004/02/14-21:23
記事番号24857へのコメント
佐田さんありがとうございました
>katsuyoshiさん
>悲しげさんが#24809で書いている様に、行挿入時にメソッド呼び出しで
>更新モードを0(表示)に変更すると、行挿入自体が取り消されてしまうのが
>本当の様ですね。機能名の表示を使って表示モードに移行するのとは
>違う様ですね。勘違いしておりました。

勘違いではありません。
前のツリーとは別の質問です。
@メッセージボックスのボタン「OKボタン」が押されたとき(&確認=1)
 はフォーカスはそのままで再入力を促す。
A「キャンセルボタン」が
 押されたとき(&確認<>1)は行挿入を取り消し表示モードとする。
Aの処理は悲しげさんからご指導頂いたのですが@が解りませんでした。

>私は通常、新規データの追加の処理では、まず行挿入コマンドで1行の挿入
>と初期値設定を終えた後、これを確定し、改めて行訂正に入っています。
>(このため取り消しには行削除が必要になる)。
>理由は、誤操作で途中までの入力を失う事がない様にするためです。

入力項目が最後の時はその方法を使っていますが今回は最初の入力項目で
レコード自体何も入力されていない状態で行削除を使用としたため
削除対象行がありませんとなりました。
24979 Re:未入力を不許可としたい 悲しげ 2004/02/20-00:40
記事番号24860へのコメント
どもっ、katsuyoshiさん
しばらく出かけていたので、断絶してしまい申し訳ありません。
その間にこのツリーも随分奥の方に下がってしまいました。(^^;)

え〜、このツリーがNo.24693からのツリーとは別件であるとのことですが、
全く別物なのか、一連の流れの中での別な工程に属するものなのか、
要するに何をしたいのかが実はよく判りません。

私はイベントの記述の部分的な「添削」を試みましたが、
それはあくまで「何をしようとしているのか」が判った上でのことです。
それがよく判らない状態での部分的な「添削」はあまり意味が無かったですね。(^^;)

が、ひとつだけ追記します。
おそらく、挙げられた処理は、コマンドボタンの機能「行追加」から入っているのだと思います。
でもこれって、私もこの度ためしてみたところ、行が未確定と云うか、
確定途中と云うか、そんな辺りでけっこう制御が難しいところありますね。(^^;)

佐田さんもそうなのでしょうけど、実は私も「行追加」は次のように扱っています。

 行追加 [某項目]=某値
 *---行追加した後は、終端行に位置しているので
 ジャンプ 行番号=最終
 *---最終行にレコードポインタを戻して
 method @t某項目.フォーカス設定()
 *---某項目にフォーカスを置き
 method @フォーム.更新モード設定(2)
 *---訂正モードにする

このようにしてから、追加済みの行で訂正入力を行う。
これって、正確に云えば「行訂正」ですから、この場合は「行追加モドキ」と呼ぶべきかもしれません。
が、この方が制御がぐっと簡単になると思います。行追加(モドキ)をキャンセルする場合は、
既存行であるところの追加行を(表示モードにした上で)行削除すればよい訳ですから。
以上、参考になれば。

戻る