3

2 つのサブフォーム (別々のタブ ページ) を持つフォームがあります。Access 2003 の MDB プロジェクトです。

最初に開いたときに、アクティブなサブフォームの Form_Current が 1 回発生します。

しかし、別のレコードに (つまり、メイン フォームから) 移動すると、アクティブなサブフォームで Form_Current が 4 回発生します。その後のレコードの移動により、Form_Current が 2 回発生します。サブフォームには移動および/または非表示になるフィールドがたくさんあるため、これは面倒です。そのため、遅いことは言うまでもなく、すべての Form_Current に対してジャンプします。

DoCmd.OpenForm を介してフィルターを使用してフォームを開いています (実際には、OpenArgs を介してフィルターを送信します)。FilterOn は、メイン フォームの Form_Open で一度だけ設定され、サブフォームでは決して設定されません。Form_Current は、コード内の他の場所では明示的に呼び出されません。

Form_Current が最初に移動するときにコール スタックを見ると、次のようになります。

my_subform.Form_Current
[<Debug Window>]
my_subform.Form_Current

そのため、Form_Current の何かが別の Form_Current イベントをトリガーしているようです。ただし、最初のレコード移動のみ。

Form_Current のコードはやや複雑で、カスタム クラスとイベント コールバックが含まれていますが、通常はテーブル データには触れていません。Form_Current をトリガーしていると思われる唯一のことは、フォーム コントロールの OldValue をチェックすることです。これが原因でしょうか?

それとも他に何か思い浮かびますか?

ありがとう。

エリック

4

1 に答える 1

2

TheAceMan1 がかつて指摘したように、「On Current イベントで注意しなければならないのは再帰だけです!つまり、イベントを再トリガーするイベント内のコードです。コード内の別のレコードに移動するようなものです。その...イベントは必要に応じて重くすることができます。」私は Current が恐ろしくぴくぴくと動くことを発見しました。とはいえ、コードを配置する唯一の場所である場合もあります。

サブフォームのイベントは、親フォームのイベントよりも前にトリガーされることに気付いているかもしれません。これは確かに Load にも当てはまり、Current にも当てはまります。

段階的なトラブルシューティングしか提案できません。部品をコメントアウトし、機能を確認し、解決します。もちろん、私たちが見ることができるように、いつでもさらに多くのコードを投稿できます。

于 2010-05-06T00:59:42.320 に答える