- 締切済み
Access イベント制御
Access2000+BVのフォームです。 プログラムの中でイベント発生を制御できませんか? 今困っているのは、フォームを開いている時にいろいろな処理をさせてます(処理A)。 その中にフィールドのSetFocusがあります。 すると、「レコード移動時」(処理B)と「フォーカス取得時」(処理C) のイベントが発生してそちらにとんでいきます。 ブレークポイントを置いて調べたら、処理Aの途中で処理Bに行ったり、処理Cに行ったり。 戻ってきたら処理Aの続きをしてくれるといいのですが、特にデータ量が多い時には、処理Aを頭からもう一度はじめたりします。 そしたら、また処理Bと処理Cに行ったりしてしまいます。 処理BとCに「旗」を置いて処理Aの途中だったら、なにもせず戻るようにしてますが、行き来しているうちに「旗」自体も白旗を上げてしまいます。 そこでプログラムのなかで、「 OnCurrent_Event = false 」「OnEnter_Event = true 」なんて感じでイベントが発生してもその処理に行かなくする方法はないですか? 意味が通じたでしょうか?よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
タブを切り替えるごとにレコードセット作成されているんでしょうか? RS.Close Set RS=Nothing で解放されているんですよね?
- hawkwind
- ベストアンサー率34% (160/469)
イベントの制御は難しいです。 イベントはメッセージキューの順番通りに実行されます。 このメッセージを送られるタイミングがパソコンのタスクに左右されるため、 イメージ通りに動かず、いろいろと厄介な面があります。 これを回避するにはメッセージフックしかありませんが、 これだけのためにフックの勉強をするには本末転倒なうえに ACCESS2000ではフックが使えるとも思えません。 可能ならばイベントの順序に頼らない設計にしてみて下さい。
お礼
勉強はご勘弁を・・・ >イベントの順序に頼らない設計・・・ このほうが、早みちですね。 ありがとうございました。
Aの作業の途中で別のイベントが発生してそっちへ行ってしまうということでしょうか? で、なんか、同じようなところをぐるぐる回っているというか。。。 それだったら、EnableEvents=False でダメかな? 外していたら、ごめんなさい。
お礼
「データの競合」でもお世話になりました。 重ねて、ありがとうございます。 >EnableEvents = False ためしてみましたが、だめでした。 同じ所をグルグル回ってたので「データの競合」が、発生してたと思います。
お礼
コードでは書いていません、タブはひとつにしても同じで。。 書かなくても動いているので。 試しにやってみましたが変化なしです。 ヘボなコードですし勉強も苦手なので、イベント順序に頼らない方法でやってます。 たびたび、ありがとうございました。