過去の桐井戸端BBS (桐ver.8)
12526 テキストボックスで、その値によって編集状態にならないよう、入力前イベントで抜け出したいけが、うまくいかない。 島尾 2001/08/06-16:26
テキストボックスの入力前イベントで、テキストボックスの値をチェックして条件に満たれていなければ、
編集状態に行かないで脱出したいのですが、

メソッド呼び出し @フォーム.更新モード設定(0)

では無理でした。

以下のAのルートを取ることは出来るのでしょうか?


入力前イベント
|@ |A
|  +−−−−−−−→テキストボックス編集処理中止

ソース値更新



入力後イベント


12536 試用するイベントを見直して下さい 佐田 守弘 2001/08/06-23:55
記事番号12526へのコメント
島尾さん
始めに使用しているイベントの意味を説明します
●「入力前」「入力後」イベントの意味
入力前イベントは、テキストオブジェクトの編集に入る直前(エディタの起動後)に発生するイベントです。
このイベントの主たる用途は、エディタに初期値を引き渡したり、エディタを制御する機能です。
言うなれば、項目初期値の設定機能の様なものだと思って下さい。
一方、入力後イベントは、エディタが終了した時に発生するイベントで、
項目制約、行制約の様な事を行う機能だと思って下さい。

●質問で不明な点
質問で不明な点が1つあります。
それは目的のテキストボックスの値(初期値だと思います)がどの様な方法で設定されるのかです。
上記に書いた事から、項目初期値で設定しているのではないと仮定します。
この前提が間違っていると、以下のコメントは的外れになります。

●適切なイベントは
目的のテキストボックス(仮にこれをAと呼びます)のソース値が条件を満たしていれば、
編集に入らない様にするには、入力前イベントを使うのではなく、別の方法で判断すべきかと思います。
このAの値が、既に書き込まれているのであるとしたら、そのレコードの編集に入る段階でAの値を評価し、
条件を満たしていればフォーカス禁止満たしていなければフォーカス許可に切り換えればよいと思います。
この判断は、フォーム開始、レコード移動イベントと、Aのソース値更新イベントで実行してみて下さい。
あるいは、Aのフォーカス取得イベントを使って、フォーカスを得たタイミングで値を評価し、
条件に合致していれば次のオブジェクトにフォーカスを移動するのも1つの方法だと思います。

●値はどこで決めているのか?
やはり心配なので言及しておきます。
もしAの値を項目初期値で設定していると、Aを編集状態にしない限り項目初期値の設定が行われません。
従って、上記の方法は意味を持ちません。
そのオブジェクトの編集から抜けるには、隣のオブジェクトにフォーカスを移動させるのも1つの方法ですが、これが巧く行くかは試しておりません。
仮にAの初期値が別の項目(例えばx、y、z)の値から計算されるとしたら、
それらのオブジェクトのソース値更新イベントで、Aの値を入力するのが良いかと思います。

佐田守弘(KS-00119)


12538 Re:試用するイベントを見直して下さい 島尾 2001/08/07-08:28
記事番号12536へのコメント
コメントありがとうございます。
初期値は項目初期値ではなく、動的に変化する別表から表引きした「締め日」です。
「請求日」の入力後イベントで、「締め日」以前ならその入力は無効と警告するメッセージボックスを表示して入力継続させてました。
ところが間違って「請求日」に編集状態に入ってしまうと、値が「締め日」以前の場合、
入力後イベントのせいで元の値に戻せない状態になってしまうため、
「請求日」に値が入力してある場合のみ、入力前イベントで警告して編集脱出を許すような処理にしようと思いました。
操作性的には「請求日」にフォーカスが当たっていた方が、操作性的にやりやすいので、
(↑↓キーで同一項目のまま縦移動が出来るため)フォーカスが当たりつつ編集禁止に出来れば一番いいのですが。
または 入力前前イベント?のような事が実現できれば。

12539 Re:入力前イベントから抜け出すには? 悲しげ 2001/08/07-09:54
記事番号12526へのコメント
どもっ、島尾さん
全然関係ないことかもしれませんが、「ソース値更新」イベントは
「入力後」イベントの後です、前ではありません。(^^;)
12540 Re:試用するイベントを見直して下さい 尾形 2001/08/07-10:23
記事番号12538へのコメント
島尾さん、こんにちは

>の場合、入力後イベントのせいで元の値に戻せない状態になってしまうため、
>「請求日」に値が入力してある場合のみ、入力前イベントで警告して編集脱出を許
>すような処理にしようと思いました。
入力前イベントで「請求日」を変数に確保しておき
それをからめて、入力後イベントで判断してはどうですか?

入力後イベントで入力前の値も参照できるように
なるといいですよねぇ


12543 Re:入力前イベントから抜け出すには? アックン 2001/08/07-12:35
記事番号12526へのコメント
島尾さん、こんにちは。
佐田さんと悲しげさんがすでに指摘しているとおりで、おさえておきたい点だけ、たちまち書いておきます。

・イベントの発生順は、次のようになります。
入力前 → 入力後 → ソース値更新

・入力前
ここで項目値を変数に取得できます。
例:  &ナントカ = [ナントカ]

・入力後
このイベントが終了した時点で、&編集文字列が項目値になります。

・ソース値更新
三つのイベントの中で、「更新モードの変更」が可能なのは、ソース値更新だけです。
ですから、
メソッド呼び出し @フォーム.更新モード設定(x)
のような「更新モードの変更」は、このソース値更新に記述します。

同様に、「フォーカスの変更」が可能なのも、ソース値更新だけです。
method h=&propertywin , @tピクチャ名.フォーカス設定()
のような「フォーカスの変更」も、このソース値更新に記述します。

アックン(=^・^=)

12579 ありがとうございます。 島尾 2001/08/10-13:01
記事番号12526へのコメント
いろいろありがとうございます。
とりあえずこれから色々試してみます。

戻る