過去の桐井戸端BBS (桐ver.8)
5202 キーダウンイベントと入力後イベントの関係 tuji 2000/03/15-21:39
キーダウンイベントに、

ケース開始
ケース(&仮想キーコード=9 .and &フラグ=4)
 メソッド呼び出し @フォーム.フォーカスオブジェクト取得(&focus)
 条件(&focus=bbb)  メソッド呼び出し @aaa.フォーカス設定()
 条件(&focus=bbb)  メソッド呼び出し @フォーム.更新モード設定(2)
ケース終了

という感じで定義してみたのですが、
フォームが訂正モードで尚かつ
入力後イベントで未定義を禁止したテキストオブジェクトでは、
未入力状態でShift+tabを押しても、
フォーカスが移動せず、入力後イベントで未定義の場合に出るように設定してある
メッセージボックスが出て入力後イベントから抜けられなくなります。
(勿論なにか入力してやれば動きますけど)
単なる訂正モードになっている場合や(入力後の設定無しの場合)、
入力後イベントが関係ない表示モードの時には
Shift+tabを押すと、
テキストオブジェクトがbbbであればaaaにフォーカスが移動し、
訂正モードになるのですが・・・。

多遊さんのページにあるイベントの発生順ではキーダウンの方が
先のような気がしたのですが、見方が違ったのでしょうか?

ということで回避方法をご存じの方いらっしゃいましたらご教示下さいませ。
5210 Re:キーダウンイベントと入力後イベントの関係 悲しげ 2000/03/16-00:58
記事番号5202へのコメント
どもっ、tujiさん、
想像ですが、これはですね、確かに「キーダウン」イベントは発生
しているのでしょうけど、「入力後」の段階では即ち「訂正モード」
にある訳で、訂正モードでは「フォーカス設定」(の変更)ができ
ないからではないでしょうか?

>入力後イベントで未定義を禁止したテキストオブジェクトでは、
>未入力状態で

と云うことは訂正モードで、未定義状態なので、未定義を禁止した
「入力後」イベントを抜けられないとか?
いえ、外しているかもしれませんけど。
「入力後」イベントで判断して必要な処理をした後、「ソース値更新」で
更新モード設定(0)にしてから、フォーカス設定すると云う
方法なんかも検討してみて下さい。

5214 Re:キーダウンイベントと入力後イベントの関係 hidetake 2000/03/16-07:58
記事番号5210へのコメント
これは、キーダウンイベントの結果、フォーカス移動により
入力後イベントが発生し、未定義禁止が働くため、結果的に
フォーカスが移動されないと言うことでは...

だとすると、SHIFT+TAB を押された状態であれば未定義でも
良いと言うことであれば、キーダウンイベントでフラグを
設定し、入力後イベントでそのフラグが立っていれば未定義
も許すようにするとか、

あるいは、入力前イベントで直前の値を記録し元々が未定義で
有れば入力後も未定義は許すとかの

入力後に特定の条件で未定義を許す設定をする必要があるの
では無いでしょうか?


5222 Re:キーダウンイベントと入力後イベントの関係 tuji 2000/03/16-14:56
記事番号5214へのコメント
>これは、キーダウンイベントの結果、フォーカス移動により
>入力後イベントが発生し、未定義禁止が働くため、結果的に
>フォーカスが移動されないと言うことでは...

確かにそのとおりみたいでした。

ケース開始
ケース(&仮想キーコード=9 .and &フラグ=4)
メソッド呼び出し @フォーム.フォーカスオブジェクト取得(&focus)
2→
条件(&focus=bbb)  メソッド呼び出し @aaa.フォーカス設定()
条件(&focus=bbb)  メソッド呼び出し @フォーム.更新モード設定(2)
1→
ケース終了

始め、条件(&focus=bbb) 代入 &チェック=0
というフラグ立てを何も考えず1の部分に入れてしまい、
入力後イベントが働いてしまい朝から悩んでましたが。
2の部分に入れることにより全てうまくいくようになりました。

一括処理の流れから思いこみで、
一つのイベントは単独で働いていて、
イベントが終了して初めて次のイベントに移るような感覚でいました。
でも実際にはイベント同士がかなり近い関係にあるのですね。
良い勉強になりました。ありがとうございます。

戻る