【发布时间】:2021-05-10 05:52:49
【问题描述】:
我有一个管理图像附件的表单 (MS Access) 和几个根据各种选择标准显示这些附件的报告。所有图像文件 (.jpg ) 的最大大小为 1.4Mb。表单一次只显示一个图像,当我移动到每条记录时,新图像会闪烁 - 通常显示,清除然后再次显示。有时图像只显示一次,但这种行为与图像大小之间似乎没有相关性 - 较小的附件通常会受到相同的影响,而较大的附件有时会显示一次而不会闪烁。表单显示和图像显示之间似乎存在一些相位问题,但我只是猜测。
在报告中,初始显示没有闪烁,只要我不使用滚动条上/下箭头或拖动滑块,任何刷新都是可以接受的(当然不是很流畅,但我可以忍受) .单击滑块任一侧的滚动条区域,刷新是可以接受的(不光滑)。使用滑块或箭头,会出现令人无法接受的频闪。
我在网上搜索了“MS ACCESS”,附件,图像,闪烁数次,但我只能找到关于闪烁表单的文章,这在此应用程序在 Windows 10 64 位上运行时没有问题,内存充足, 2Gb 图形。我找不到任何与图片附件闪烁相关的内容。
我主要关心的是提高表单的可用性;对于报告,谨慎的建议不要拖动滑块或使用滚动条箭头就足够了,在紧要关头。
在我当前的应用程序的上下文中,这不是一个大问题,因为图像附件不是关键要求。尽管如此,我想知道有什么方法可以在将来更重要的任何事情上停止闪烁。
根据以下建议进行进一步调查后进行编辑。
我尝试将 .visible = false 和 .visible = true 放入各种事件处理程序中,但没有太大变化,除了至少使用一种组合使闪烁变得更糟。我不确定我可以提供什么代码来帮助您提出任何建议,但以下内容可能有用:
表单的记录源是一个表格,提供一个数据类型附件的字段“imagelink”,加上两个文本字段:“description”(短文本)和“cmets”(长文本)。此外,该表单具有三个组合框。其中两个在一个父表 tblSite 和 tblSpecies 上都有一个简单 SQL 的行源,在这两种情况下都隐藏了外键,只有 tbleSite.sitename 和 tblSpecies.commonname 在组合框中可见。第三个组合框在一个表 (tblColour) 上有一个简单的 SQL 行源,它是 tblSpecies 的子表,受 WHERE 子句的约束,只提供适用于当前物种的颜色类型。除了删除按钮,就是这样。
我将一些 MsgBox 跟踪信息放入多个事件处理程序中以查看发生了什么。我使用 MsgBox 而不是调试器,因为我想同时在屏幕上查看事件和行为(Access noob)。这就是发生的情况,no .Visible = False/True 代码处于活动状态:
从头开始启动表单:
看不到图片
Form_Open
Form_Load
attImage_AttachmentCurrent
Form_Current
图像出现,无闪烁
Detail_Paint(两次)
随后通过导航按钮转到下一条记录:
Detail_Paint
第一张图片空白
Detail_Paint
第一张图片再次出现
Detail_Paint
第一张图片空白
Detail_Paint
下一个(第二个)图像出现
Detail_Paint(三遍)
第二张图片空白
Detail_Paint
第二张图片再次出现
attImage_AttachmentCurrent
Form_Current
Detail_Paint
第二张图片空白
Detail_Paint
第二张图片再次出现
Detail_Paint
第二张图片空白
Detail_Paint
第二张图片再次出现
每次我从一条记录移动到另一条记录时,都会发生上述顺序。毫无疑问,还会有其他事件;我只追踪了我认为最相关的内容。
此外,当停留在任何一条记录上但通过鼠标单击在各种文本和组合框之间更改焦点时,会发生这种情况:
Detail_Paint
图片空白
Detail_Paint
图像再次出现
表单上还有一个删除按钮,有时(我还没有尝试过跟踪它)会导致图像在鼠标经过时闪烁——我怀疑有很多 Detail_Paint 事件。这并不总是发生 - 如果需要,我可以做更多的跟踪,但我觉得我错过了一些非常简单、明显的点(Access noob,如前所述)。
我唯一拥有的其他事件代码是:
在站点和物种更新后,确保只有一个或另一个不为空,并相应地启用/禁用其他组合框(图像可以是昆虫或站点,不能同时是两者,颜色只能分配给已选择的物种)。物种更新后还会重置颜色组合框行源,以将颜色限制为与新物种相关的颜色。
在我看来,在留下记录时设置 .visible = False,然后在新记录稳定后设置 .visible = True,可能会起作用。但是,我看不到任何合适的 Detail 事件可以做到这一点。 On_Next_Record_Click 和 On_Current_Record_Finshed_Doing_Stuff 会有所帮助,但据我所知没有这样的事情。
如果有任何您认为可能有用的现有代码,我可以附上详细信息。我还有一些头发。对于我所做的任何愚蠢的事情,我深表歉意,但事件处理从来都不是我的强项——请给我一些程序。
【问题讨论】:
-
myimage.visible = false开始加载记录,然后myimage.visible = true加载完成。这应该可以防止闪烁。由于您没有显示任何代码,因此无法确定放置这些指令的 excat 位置。 -
我现在不知道这是否适合您,但我从未使用过附加图像,而是使用与 id 相关的文件名或带有文件名的文本字段,然后简单地将它们分配给适当的控制显示。即使使用旧的慢速计算机,也从未遇到过闪烁问题。
-
Thomas G,请看一下编辑。 SunKnight0,如果我无法修复附件,我会将其视为一个选项。
标签: image ms-access attachment flicker