0

这个问题主要是出于好奇,但在描述中,我曾打算强调 Access 的一个不常记录的行为。

背景

创建 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 并没有修改 Detail 部分中标签的实例,而是修改了报表上标签的定义

这可以通过对代码的以下修改来证明:

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

假设标签最初是可见的(在表单设计器中),该事件会产生一些意想不到的行为:标签将保持可见直到第一个空记录;之后,它将对所有其他记录保持隐藏 - 我最初预计在每次调用Detail_Format控件时都会从它们的默认定义开始。

问题

有没有办法在事件中引用控件的特定实例Detail_Format

在这种可见真/假的简单情况下,只需一个简单的 if-then-else 即可轻松处理,但我可以想象更高级的场景,其中可能希望保留默认值。

4

1 回答 1

1

我不这么认为,根据我的所有经验,报表对象的属性总是普遍适用于整个报表,而不是对象的特定实例(如果对象重复)。

对于您的示例,我将使用文本框而不是标签来标记字段,并使用类似的东西=IIf(IsNull(Field1), "", "Label:")作为控制源。这样,如果字段为空,它不会显示任何内容,但如果有值,仍会显示标签文本。

于 2012-08-01T23:52:29.777 回答