2009-06-03 5 views
1

ユーザーが特定のレコードを選択したときに実行されるイベントプロシージャがあります。CURRENTイベントがフォームのOPENイベント中でないかどうかを確認する方法

私はON CURRENTイベントに入れると動作します。

ただし、フォームを開いているときに実行する必要はありません。つまり、フォームが開かれ、レコードがフォームにロードされると、ロードされた レコードごとに、自分のイベントプロシージャが呼び出されます。これは不要なので、プログラムが遅くなります。

私の質問は、レコードの「読み込み中」にイベントが実行されていないことを確認する方法です。以下のような

何か:

on_current_event do: 

if event is not during on_load then 
do this 
end if 

end proc 
+0

フォームを開いたときにオン・カレンダーのイベントを1つだけ取得する必要があります。何か不思議なことをしているのでなければ、何かの再クエリや何かをやっていますか? –

+0

申し訳ありません、はい、おそらく一度呼び出されます。しかし、私はメインフォームの別のレコードに移動します。それはメインフォームで通過する各レコードに対して呼び出されます。減速 –

+0

これはOnCurrentイベントの目的全体です。新しいレコードに移動するたびに呼び出されます。 OnLoadイベントは、フォームが開いたら一度だけ呼び出されます。 –

答えて

0

あなたはかなりよく、あなた自身の質問に答えました - あなたは、オンロードイベントを使用していない理由は?

+0

しかし、私は別のレコードにカーソルを移動すると、イベントプロシージャを呼び出す必要があります。負荷では、それは呼ばれません –

+0

申し訳ありませんが、あなたは正しいです。私はあなたの質問を読んで、一度に1つの行を表示していて、行の選択ごとにフォームを再読み込みしていると仮定しました。サイモンのソリューションが優れています。 – dsteele

3

フォームレベルのブール変数を宣言し、フォームの読み込みが完了したらtrueに設定してみませんか?あなたは、その後のような何かを行うことができ、あなたのOnCurrentイベントで

Private isLoading As Boolean 

Private Sub Form_Open(Cancel as Boolean) 
    isLoading = True 
End Sub 

Private Sub Form_Current() 
    If isLoading Then 
     isLoading = False 
     Exit Sub 
    End If 
End Sub 

:フォームのコードで

If Variable then 
    Do Stuff 
Else 
    Don't do stuff 
End If 

これはおそらく、しかし、根本的な問題に対処されていません...

2

そうすれば、フォームが開かれているときに最初に起こったOnCurrentイベントは回避されます。

これはあなたの本当の根底にある問題ではないと私は思っていますが、他の人に手伝ってもらいたい場合は、さらに情報を提供する必要があります。

+0

これはsimonの解決策であると思います。 Form_Closeまたはform_deactive isloading = trueを追加しますか? –

+0

フォームを閉じるときに何も追加する必要はありません。それが閉じられると、オブジェクトは通常破壊されます。再度開くと、すべての値が初期化された新しいフォームオブジェクトが作成されます。フォームに属している変数は、それと共に死ぬ。 –

関連する問題