steve lewy 在对原始帖子的评论中提到的设计缺陷有一个解决方法。有一个文本框可能会执行以下两项操作:
- 当内容对于盒子来说太大,而盒子没有
获得焦点,框显示其内容的最后一部分,
而不是它的第一部分。
- 当框有焦点时,它可以滚动到文本的任何部分,
但它最初只显示文本的最后一部分,
光标在文本末尾。
这是通过实际上有两个相同大小的重叠文本框来实现的,其中一个仅在焦点位于其他地方时可见,而另一个仅在具有焦点时可见。
以下是如何在 Access 2010 中执行此操作的示例。
创建一个新的 Access 数据库,并在其唯一的表中创建一个名为 LongNote 的备注字段。用一些长文本示例填充 LongNote。创建用于编辑该表的表单。
使用所需的大小和字体创建一个名为 BackBox 的文本框,该文本框太小而无法完全显示其数据源 LongNote 的典型值。 (您可以重命名在表单上创建的默认文本框,而不是创建此框。)
制作一个名为 FrontBox 的盒子的精确副本。将 FrontBox 的数据源设置为 BackBox 的全部内容或最后一部分内容,如下图所示。最后一部分的大小(以字符为单位)取决于框的大小及其字体,以及要显示的文本类型。它需要通过反复试验来选择,以可靠地允许在框中显示许多字符。例如,下面是一个只能容纳 250 个字符的盒子的公式:
=iif(Len([BackBox])>=250,"... " & Right([BackBox],246),[BackBox])
如果整个值太大而无法显示,则在显示的部分前面三个点表示它不完整。
创建另一个名为“OtherBox”的文本框,只是为了在已经提到的两个框之外有一个可以点击的地方,所以它们都没有焦点。还要创建一个名为 FocusTrap 的小 (0.0097 x 0.0097) 文本框,用于避免在显示表单时选择任何获得焦点的文本框的全部内容(因为以这种方式选择的文本很难阅读)。
输入以下事件处理 VBA 代码:
' Prevent all text boxes from being focused when a new record becomes
' current, because the focus will select the whole text and make it ugly
Private Sub Form_Current()
FocusTrap.SetFocus
End Sub
Private Sub Form_Open(Cancel As Integer)
FocusTrap.SetFocus
End Sub
' When FrontBox receives focus, switch the focus to BackBox,
' which can display the entire text
Private Sub FrontBox_GotFocus()
BackBox.SetFocus
FrontBox.Visible = False
End Sub
' When BackBox receives the focus, set the selection to
' the end of the text
Private Sub BackBox_GotFocus()
BackBox.SelStart = Len([LongNote])
BackBox.SelLength = 0
End Sub
' When BackBox loses focus, re-display FrontBox – if the text in
' BackBox has changed, then FrontBox will follow the change
Private Sub BackBox_LostFocus()
FrontBox.Visible = True
End Sub
测试表单。当您单击 FrontBox 时,它应该会消失,让您在 BackBox 上工作。当您在 OtherBox 中单击以从 BackBox 中移除焦点时,FrontBox 应该会重新出现。在 BackBox 中所做的任何编辑都应反映在 FrontBox 中。
回到设计模式,移动 FrontBox 使其正好覆盖 BackBox,然后单击 Position |带到前面以确保它覆盖 BackBox。现在再次测试表单。看起来应该有一个文本框在显示最后几行模式和编辑整个内容模式之间切换。