過去の桐井戸端BBS (桐ver.8)
2433 フォーカス設定(データの妥当性をチェックしたい) 霧島五郎 1999/8/18-17:25
V8のイベントです。

フォームからデータの入力を行った後、入力されたデータを表に書き込む前に、
[行挿入終了前]イベント内でそれぞれのデータの妥当性をチェックしています。

本来なら、エラーがあった場合はその項目にフォーカスを設定し、
再度入力を促すような処理を行いたいのですが、
[行挿入終了前]イベントではフォーカス設定が行えません。

何か良い方法は無いでしょうか?
よろしくお願いいたします。
2446 Re: いかすぱげてぃ 1999/8/19-12:26
記事番号2433へのコメント
霧島五郎さん、こんにちわ。

>フォームからデータの入力を行った後、入力されたデータを表に書き込む前に、
>[行挿入終了前]イベント内でそれぞれのデータの妥当性をチェックしています。
>
>本来なら、エラーがあった場合はその項目にフォーカスを設定し、
>再度入力を促すような処理を行いたいのですが、
>[行挿入終了前]イベントではフォーカス設定が行えません。

メッセージを拝見して、私もちょっと考えてみました。
うーん、確かにこんなにありがちな処理が簡単にできないようだと
なんだか、仕様の不備って感じがしちゃいますね。

どうしよう…(^^;かなり面倒くさそう…

まず、行挿入終了前イベントではフォーカスの設定が出来ないから、
このイベントはあっさり諦めちゃいます。(とほほ)
となると、行挿入終了イベントを使うしかなくなっちゃいそうですね。

で、再入力訂正を行いたい項目は行挿入終了前イベントで取得できている
わけですから、これはよしと…
そうなると、

0)まず、行挿入終了前イベントで再入力継続するオブジェクトを取得(フラグ立)
1)行挿入終了イベントで、行挿入終了前イベントでフラグが立っていたら
 1)メソッド @フォーム.更新モード設定(0)
 2)メソッド @<再入力オブジェクト>.フォーカス設定()
 3)メソッド @フォーム.更新モード設定(2)
とでもして、訂正モードに入る。
2)新規に行訂正前イベントで0)と同様なチェックをする
3)もしチェックで引っかかった場合の為にここでも1)と同様な処理を記述
  または手続き化しておいてコールする
4)正しい値に再入力できエラーに引っかからなかった場合にのみ
 1)フラグ変数をnulにしてから
 2)メソッド @フォーム.更新モード設定(4)
 として、黙ってまた、行挿入モードへ入る

見かけ上では、これでうまくいくような気がしますが、それにしても、
なんともはや、面倒な処理ですね。
それにこの処理の他にも、キャンセルした場合すでにテーブルに書き込んで
しまっているデータを削除する処理とかも必要になりますし…

本当にこんな手続き書かなくちゃいけないのかぁ?(^^;
もっと、簡単にできないだろうか…

ということで、あまり賢い返答になっていませんが、申し訳ありません。
後で私もゆっくりと考えてみますです。はい(^^;
2452 Re: 霧島五郎 1999/8/19-15:10
記事番号2446へのコメント
いかすぱげてぃさん、さっそくのご返答、有り難うございました。
ご指摘の通り、あっさり「行挿入前イベント」はあきらめることにしました。(^^;)

実は、現在作成しているのは、フォームを利用して顧客マスターのエントリーを行うものです。
仕様としては、フォーム上の「登録する」ボタンをクリックすることによって、
データの更新を行うというものなのですが、更新前にデータの論理チェックを行い、
エラーがあれば、その項目にカーソルを移し再度入力を促すという、
ごくありきたりなものです。

で、この度いかすぱげてぃさんのご指摘を参考に、
「登録する」ボタンの機能名には<手続き実行>のみを指定し(今までは<表示>を設定して
いた)、
その手続きの中で、エラーチェックから更新までを行うようにしてみました。
 エラーがあれば、メッセージを出力してカーソルを移す。
 エラーがなければ、更新モード設定で<表示>に戻す。
といった具合に変えてみたところ、上手く動作するようになりました。

それにしても「行挿入前イベント」が、更新前のチェック用に用意されたイベントなんだった
ら、(マニュアルにはそうとも書いてあるし・・・)
どうしてフォーカス設定が不可なのか、私ごとき未熟者にはよくわかりません。(^^;)

戻る