【问题标题】:Display Issue for filtering a combobox in a continuous form以连续形式过滤组合框的显示问题
【发布时间】:2015-09-24 04:09:03
【问题描述】:

我有一个包含许多记录的连续表格。每条记录都包含一个组合框,该组合框有 vba 代码在获得焦点时过滤可查看的选择(它通过更改 RowSource 来实现。

我的问题是,如果我单击记录 A 中的组合框,然后单击组合框是记录 B,则记录 B 的显示过滤器将应用于记录 A。如果单击另一个控件,则没有此问题在单击组合框之间。

为什么即使焦点已(假设)丢失,过滤器仍应用于 A 的组合框?以及如何防止发生此显示错误?我现在唯一的解决方案是在组合框的焦点丢失时使任意控件获得焦点,但显然这对用户来说很烦人......

可能相关的代码(SuperintendentID 是我的组合框的名称):

Private Sub SuperintendentID_GotFocus()
'Filters SuperintendentID based on the task's division
    Me!SuperintendentID.RowSource = "SELECT tblJoinDivisionSuperintendent.SuperintendentID, [FirstName] & "" "" & [LastName] AS Name, tblJoinDivisionSuperintendent.DivisionID FROM tblSuperintendent RIGHT JOIN (tblDivision RIGHT JOIN tblJoinDivisionSuperintendent ON tblDivision.ID = tblJoinDivisionSuperintendent.DivisionID) ON tblSuperintendent.ID = tblJoinDivisionSuperintendent.SuperintendentID WHERE tblJoinDivisionSuperintendent.DivisionID = " & Me!DivisionID & ";"
    Me!SuperintendentID = Me!SuperintendentID.ItemData(0)
    Me!SuperintendentID = Me!SuperintendentID.OldValue 'Prevents a new value from being assigned when the control first gains focus
End Sub

【问题讨论】:

    标签: ms-access combobox vba ms-access-2013


    【解决方案1】:

    您可能同时触发了组合框A 和组合框B 的GotFocus 事件,但屏幕只显示您最后更改的值。 您可以添加使用 Form.Repaint 方法(其中 Form=您的表单对象)作为 GotFocus 事件的一部分,以确保在更改基础数据源后刷新屏幕。

    您可以通过在事件中添加 debug.print 语句来测试它以确保两个事件都被触发,例如 debug.print "GotFocus ComboboxA"

    【讨论】:

    • 有趣.. 如果我将该行添加到 GotFocus 或 LostFocus 事件中,它不起作用。但是,如果我将它添加到两者中,它就解决了我的问题。知道为什么吗?不管怎样,它解决了我的问题。谢谢!
    猜你喜欢
    • 2016-06-03
    • 1970-01-01
    • 2016-05-31
    • 2012-10-12
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    相关资源
    最近更新 更多