0

この質問は主に好奇心のためのものですが、説明の中で、私はアクセスのまれにしか文書化されていない動作を強調することを意図していました。

バックグラウンド

Accessレポートを作成するときに、詳細セクションのOn Formatメソッドを使用して、レコードごとの値またはプロパティを変更できます。たとえば、値が空のときにフィールドラベルを非表示にしたいとします。

Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
    If (IsNull(Me.SomeField) Or Me.SomeField = "") Then
        Me.SomeFieldLabel.Visible = False
    Else
        Me.SomeFieldLabel.Visible = True
    End If
End Sub

今日までこれについて私が気付いて.Visible = False いなかったのは、割り当てによって詳細セクションのラベルのインスタンスが変更されるのではなく、レポートのラベルの定義が変更されるということです。

これは、コードを次のように変更することで実証できます。

Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
    If (IsNull(Me.SomeField) Or Me.SomeField = "") Then
        Me.SomeFieldLabel.Visible = False
    End If
End Sub

ラベルが(Designerの形式で)最初に表示されていると仮定すると、イベントによって予期しない動作が発生します。ラベルは最初の空のレコードまで表示されたままになります。その後、それは他のすべてのレコードに対して非表示のままになります-私は当初Detail_Format、コントロールを呼び出すたびに、デフォルトの定義から開始することを期待していました。

質問

Detail_Formatイベント内のコントロールの特定のインスタンスを参照する方法はありますか?

目に見えるtrue/falseのこの単純なケースでは、これは単純なif-then-elseで簡単に処理できますが、デフォルト値をそのままにしておくことができる、より高度なシナリオを想像できます。

4

1 に答える 1

1

私の経験のすべてにおいて、レポートオブジェクトのプロパティは、オブジェクトの特定のインスタンスではなく、レポート全体に常に普遍的に適用されるとは思いません(オブジェクトが繰り返される場合)。

たとえば、ラベルの代わりにテキストボックスを使用してフィールドにラベルを付け=IIf(IsNull(Field1), "", "Label:")、controlsourceのようなものを使用します。そうすれば、フィールドがnullの場合は何も表示されませんが、値がある場合はラベルテキストが表示されます。

于 2012-08-01T23:52:29.777 に答える