我有一个管理图像附件的表格(MS Access)和一些基于各种选择标准显示这些附件的报告。所有图像文件(.jpg)的最大大小保持为1.4Mb。该表格一次只显示一幅图像,当我移至每条记录时,新图像会闪烁-通常显示,清除然后再次显示。有时,图像仅显示一次,但此行为与图像大小之间似乎没有关联-较小的附件通常具有相同的效果,而较大的附件有时仅显示一次而不会闪烁。表单显示和图像显示之间似乎存在一些阶段性问题,但我只是在猜测。
在报告中,初始显示没有闪烁,并且只要我不使用上/下滚动条或拖动滑块,任何刷新都是可以接受的(某些情况下不能滑动,但我可以接受) 。单击滑块两侧的滚动条区域,可以接受刷新(不平滑)。使用滑块或箭头,事情变得令人不可接受地令人恐惧。
我已经在线搜索了“ MS ACCESS”,附件,图像和闪烁几次,但我只能找到闪烁形式的文章,这在运行于Windows 10 64位Windows 10上的该应用程序中没有问题,有足够的内存,2Gb图形。我找不到与图像附件闪烁有关的任何内容。
我主要关心的是提高表格的可用性;对于报告,请紧紧建议不要拖动滑块或使用滚动条箭头。
在我当前的应用程序上下文中,这不是一个大问题,因为图像附件并不是关键要求。尽管如此,我想知道在将来任何更重要的事情上都可以停止闪烁。
编辑,然后根据以下建议进行进一步调查。
我尝试将.visible = false和.visible = true放入各种事件处理程序中,但变化不大,除了使用至少一种组合使闪烁更糟。我不确定我可以提供什么代码来帮助您提出任何建议,但以下可能有用:
表单的记录源是一个表,该表提供一个数据类型附件字段“ imagelink”,以及两个文本字段:“ description”(短文本)和“ comments”(长文本)。此外,该表单具有三个组合框。其中两个在一个父表上都有一个简单SQL的行源,分别是tblSite和tblSpecies,在这两种情况下都隐藏了外键,在组合框中仅显示了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事件)。这种情况并非总是会发生-如果需要,我可以进行更多跟踪,但是我觉得我遗漏了一些非常简单,显而易见的要点(如前所述,访问noob)。
我仅有的其他事件代码是:
在站点和物种更新后,要确保只有一个或另一个不为空,并相应地启用/禁用其他组合框(图像可以是昆虫或站点,不能同时是昆虫或站点,颜色只能是昆虫或站点分配给已经选择的物种)。 “物种更新后”还会重置“颜色”组合框行源,以将颜色限制为与新物种相关的颜色。
在我看来,在保留记录时设置.visible = False,然后在新记录稳定下来后将.visible = True可能会起作用。但是,我看不到任何合适的Detail事件可以做到这一点。 On_Next_Record_Click和On_Current_Record_Finshed_Doing_Stuff会有所帮助,但据我所知,这还没有。
如果您认为有任何现有的代码有用,我可以附上详细信息。我还剩下一些头发。对于所做的任何愚蠢的事情,我都表示歉意,但是事件处理从来都不是我的强项-请给我程序。
答案 0 :(得分:2)
我在我的数据库中遇到了同样的问题,当我从一个记录转到另一个记录时,照片附件会闪烁。我使用了 application.echo 属性并在当前事件代码中将其关闭,但问题仍然存在。
我意识到它也在通过更新后事件运行,但是当我在该代码上关闭 application.echo 时,它消除了闪烁。
确保在每个子程序结束时重新打开 application.echo。
答案 1 :(得分:1)
为了防止屏幕在表单上从一个附件移动到下一个附件时屏幕闪烁,您可以将附件控件的 KeyDown 事件与表单的 Timer 事件结合起来。
我通过在附件控件的 KeyDown 事件上关闭屏幕重绘并在窗体的计时器发生时再次打开它来实现预期的结果。窗体的 TimerInterval 属性指定 Timer 事件之间的间隔。就我而言,一毫秒足以防止闪烁。
Private Sub Attachment_Artwork_KeyDown(KeyCode As Integer, Shift As Integer)
If 33 = KeyCode Or _
34 = KeyCode Or _
37 = KeyCode Or _
38 = KeyCode Or _
39 = KeyCode Or _
40 = KeyCode Then Application.Echo False
End Sub
Private Sub Form_Timer()
Application.Echo True
End Sub