過去の桐井戸端BBS (桐ver.8)
8746 入力後イベントで未定義値を許可しないようにしていますが.. cheese 2000/11/24-14:08
フォーム編集で、ある項目に"入力後イベント"を指定しています。
例えば未定義値を許可しないようにし、未定義値だったら
"入力項目に誤りがあります"などと確認メッセージを出し
&入力継続=1 にして止まるようにしています。
この時に、入力を中断しようとして、右上の閉じるボタンを押したときも
入力後イベントが発生するらしく、先に進めなくなります。
入力後の代りに"ソース値更新"でもいいのですが、マウスで項目の移動ができてしまうので難しいところです。
この辺の制御をうまくやられている方がおいででしたらヒントを教えていただければと思います。

8749 Re:入力後イベントについて 佐田 守弘 2000/11/24-17:01
記事番号8746へのコメント
cheeseさん
ざっと考えてのコメントですが、未定義値を禁止する限り、どの様な方法で行っても同じではないでしょうか。
これは項目制約、行制約の場合も同じで、入力途中で入力を中断すれば当然の事ながら項目は未定義になります。
未定義が禁止されている限り、その行の追加を止めるか、値の編集を取り消すかして、
未定義値でない状態にしないと、自分で設定した未定義の禁止による制約を受ける事になります。

未定義値を禁止すると共に、ある条件下では未定義値を特別に許可する。
そんな方法を考えなければなりませんね。
でもそれでは未定義を禁止した事になるかどうかが疑問になります。

佐田守弘(KS-00119)


8753 Re:入力後イベントについて cheese 2000/11/24-18:35
記事番号8749へのコメント
佐田様
早速のコメントありがとうございました。
閉じるボタンを押したら、行追加や訂正を中止して閉じてもらいたかったのですがやはり無理ですね。
考えた末、機能名 閉じる 機能パラメータリスト 破棄する のコマンドボタンを作成し
フォームのオブジェクト属性->オプション->実行コマンド の終了時にこのコマンドボタンを指定したところ、
確認メッセージは出ますが、その後閉じるようになりました。
すこし、不満ですが良い方法が見つかるまでこれで対応することにします。
8762 入力直後のチェック 尾形 2000/11/25-08:47
記事番号8753へのコメント
どうもお邪魔します。
自分もこのへんはいろいろ悩みました(います?)。
キーダウンイベントで、仮想キーコードを別変数に確保しておき
入力後イベントのチェックはエンター等でのみ判定する。
クリックイベントでこの別変数はリセットさせる。
など、イロイロとやりました。
感想としては、「面倒」でした。私のスキル不足でしょうけど。
でも、やっぱり入力性ってのは大事にしたいですよね。

エンター(確定)入力後イベントが欲しいなぁと思いました(います)。

8766 Re:入力直後のチェック cheese 2000/11/25-19:59
記事番号8762へのコメント
尾形さん、コメントありがとうございました。
私も、このままでは使用に耐えられないので、入力後イベントの
代りにソース値更新にし、入力終了後キーダウンイベントで
再度チェックするようにしたら、うまくいきました。
私も同様に面倒でした。
確定イベントについては良くわかりません。
すいません。
8769 入力直後のイベントは 佐田 守弘 2000/11/26-21:54
記事番号8762へのコメント
尾形さん
>エンター(確定)入力後イベントが欲しいなぁと思いました(います)。
意味を取り違えていたら失礼しますが、テキストボックスで文字列を確定し、
Enterキーを押した後に発生するのが、入力後イベントだと思います。

関連するイベントも含めて多少解説しますと次のようになります。

@入力前イベント
テキストボックスに入力するために、例えばスペースキーを押す、編集モードに切り換えると言った操作をした時点で発生します。
この段階ではテキストボックスの文字列入力を行うエディタには制御は移っていません。
タイミング的にはエディタを呼び出す直前(だから入力前)に発生します。
このイベントは、エディタに引き渡す初期値などの設定に使います。

A入力後イベント
エディタで文字を入力した後、Enterキーを押して編集を終えた時点で発生します。
この段階では、入力した値がオブジェクトのソース(項目や変数など)には引き渡されていません。
このイベントは、入力値をソースに引き渡す前に、値をチェックするために使います。
そして、値が不適切な場合には、もう一度その値をエディタに戻して、編集し直させる事ができます。
最初の質問の主旨でもある未定義値であるかどうかのチェックは、このイベントで行います。

Bソース値更新
エディタから引き渡された値が、ソースに代入された時点で発生するイベントです。
このイベントで値のチェックを行うのは必ずしも適していません。と言うのは、
表に字種や項目制約などが設定してある場合には、イベントでチェックする以前に表に設定されている各種の制約でチェックされるからです。
なぜなら、例えば項目値に値を入力する場合、項目制約があると、項目に値が書き込まれる前に、書き込もうとする値のチェックが行われます。
そして、項目に値が書き込まれた後に、ソース値更新イベントが発生します。

●Enterキーで確定した段階で発生するイベントとは
お話の中のEnterキーで確定したと言う意味が、テキストボックスに入力する直前と言う意味なら、入力後イベントです。
そうでなく、漢字変換を確定した後で、まだ入力が続く段階であれば、これに対応するイベントはありません。
なぜなら、エディタから漢字変換(松茸など)が呼び出され、エディタと漢字変換との間でやり取りされてますが、
エディタとしては漢字変換なしで半角文字を入力している途中と変わりがないからです。
もしこの段階でイベントを取るなら、キーダウンイベントを使うしかありません。

佐田守弘(KS-00119)

戻る