首页 > 解决方案 > MS Access 图像附件闪烁

问题描述

我有一个管理图像附件的表单(MS Access)和几个报告,这些报告根据各种选择标准显示这些附件。所有图像文件 (.jpg ) 的最大大小为 1.4Mb。表单一次只显示一个图像,当我移动到每条记录时,新图像会闪烁 - 通常显示,清除然后再次显示。有时图像只显示一次,但这种行为与图像大小之间似乎没有相关性 - 较小的附件通常会受到相同的影响,而较大的附件有时会显示一次而不会闪烁。表单显示和图像显示之间似乎存在一些相位问题,但我只是猜测。

在报告中,初始显示没有闪烁,只要我不使用滚动条上/下箭头或拖动滑块,任何刷新都是可以接受的(当然不是光滑但我可以忍受)。单击滑块任一侧的滚动条区域,刷新是可以接受的(不光滑)。使用滑块或箭头,事情会变得不可接受的频闪。

我在网上搜索了“MS ACCESS”、附件、图像、闪烁数次,但我能找到的都是关于闪烁表单的文章,这对于在 Windows 10 64 位、大量内存、2Gb 图形上运行的此应用程序来说不是问题. 我找不到与图像附件闪烁相关的任何内容。

我主要关心的是提高表单的可用性;对于报告,谨慎的建议不要拖动滑块或使用滚动条箭头就足够了,在紧要关头。

在我当前的应用程序的上下文中,这不是一个大问题,因为图像附件不是一个关键要求。尽管如此,我想知道有什么方法可以在将来更重要的任何事情上停止闪烁。

编辑,按照以下建议提示进行进一步调查。

我尝试将 .visible = false 和 .visible = true 放入各种事件处理程序中,但没有太大变化,除了至少使用一种组合使闪烁变得更糟。我不确定我可以提供什么代码来帮助您提出任何建议,但以下内容可能有用:

表单的记录源是一个表格,它提供一个数据类型附件的字段“imagelink”,加上两个文本字段:“description”(短文本)和“comments”(长文本)。此外,该表单具有三个组合框。其中两个在一个父表 tblSite 和 tblSpecies 上都有一个简单 SQL 的行源,在这两种情况下都隐藏了外键,只有 tbleSite.sitename 和 tblSpecies.commonname 在组合框中可见。第三个组合框在一个表 (tblColour) 上有一个简单的 SQL 行源,它是 tblSpecies 的子表,受 WHERE 子句的约束,只提供适用于当前物种的颜色类型。除了删除按钮之外,就是这样。

我将一些 MsgBox 跟踪信息放入多个事件处理程序中以查看发生了什么。我使用 MsgBox 而不是调试器,因为我想同时在屏幕上查看事件和行为(Access noob)。这就是发生的事情,没有.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 会有所帮助,但据我所知,没有这样的事情。

如果有任何您认为可能有用的现有代码,我可以附上详细信息。我还有一些头发。我为我所做的任何愚蠢的事情道歉,但事件处理从来都不是我的强项——请给我一些程序。

标签: imagems-accessattachmentflicker

解决方案


我在我的数据库中遇到了同样的问题,当我从一条记录转到另一条记录时,照片附件会闪烁。我使用了 application.echo 属性并在当前事件代码上将其关闭,但仍然有问题。

我意识到它也在通过更新后事件运行,但是当我在该代码上关闭 application.echo 时,它消除了闪烁。

确保在每个子例程结束时重新打开 application.echo。


推荐阅读