首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Access VBA:更改窗体页眉或页脚的可见性可清除列表框对象中的选定内容

Access VBA:更改窗体页眉或页脚的可见性可清除列表框对象中的选定内容
EN

Stack Overflow用户
提问于 2020-09-29 19:53:41
回答 3查看 490关注 0票数 1

我的MS Access (MSO 365 x64 v2004)表单有问题。在表单的详细信息部分,我有一个启用了多项选择的列表框。表单有一个页脚("frmOptions"),默认情况下是隐藏的。当在列表框中选择了多个项目并取消隐藏页脚(frmOptions.visible=true)时,由于某种原因,所有选择都会被清除。仅当将页脚的可见性设置为true时才会发生这种情况。隐藏窗体页脚似乎对列表框选择没有任何影响。当然,我可以编写一个函数,再次恢复选择,但这应该不是必需的。列表框没有Beforeupdate/Afterupdate例程。隐藏/取消隐藏页脚的代码如下:

代码语言:javascript
复制
Private Sub btn_options_Click()
    If Me.frmOptions.Visible Then
        Me.frmOptions.Visible = False
    Else
        Me.frmOptions.Visible = True
    End If
End Sub

在这段代码中有没有我必须考虑的东西,也许是列表框或窗体页脚的设置,以防止列表框中不需要的取消选择?

感谢您的帮助!

艺术。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-09-30 00:10:02

感谢您的回复!太糟糕了,这可能是故意的。我现在基于表单代码和新函数中的以下更改解决了这个问题。对代码的任何改进都是非常受欢迎的)

更改了表单代码中的过程:

代码语言:javascript
复制
Private Sub btn_options_Click()
    Dim varSelItems() As Variant
    varSelItems = ListBoxItems(Me, "customer_contact_cat") 'Save the listbox selections
    Me.frmOptions.Visible = Not Me.frmOptions.Visible
    Call ListBoxItems(Me, "customer_contact_cat", varSelItems) 'Restore the listbox Selections
End Sub

在模块中添加了功能,以便可以在其他形式中重用:

代码语言:javascript
复制
Public Function ListBoxItems(frmName As Form, strLbName As String, Optional varSelItems As Variant) As Variant

    Dim lngA As Long
    Dim lngB As Long
    Dim ctl As Control
    Dim varItem As Variant
    Dim varItems() As Variant
    
    Set ctl = frmName.Controls(strLbName)
    
    If Not IsArray(varSelItems) Then
        ReDim varItems(ctl.ItemsSelected.Count)
        lngA = 0
        For Each varItem In ctl.ItemsSelected
            varItems(lngA) = ctl.ItemData(varItem)
            lngA = lngA + 1
        Next varItem
        ListBoxItems = varItems()
    Else
        For lngA = 0 To UBound(varSelItems) - 1
            For lngB = 0 To ctl.ListCount - 1
                If ctl.ItemData(lngB) = varSelItems(lngA) Then
                    ctl.Selected(lngB) = True
                End If
            Next lngB
        Next lngA
    End If

End Function
票数 1
EN

Stack Overflow用户

发布于 2020-09-29 20:09:45

首先,你的代码可以简化为:

代码语言:javascript
复制
Private Sub btn_options_Click()

    Me.frmOptions.Visible = Not Me.frmOptions.Visible

End Sub

接下来,我可以重现这段代码,但不知道为什么。会试着找出一个解释。

很可能,这是出于某种原因而设计的,在不久的将来不会改变,也许永远不会改变。因此,您也可以开始编写重新选择列表框项目的程序。

票数 1
EN

Stack Overflow用户

发布于 2020-09-29 20:34:47

我也可以重现这种行为,我也认为你必须接受这一点。

解决方法是调整页脚的大小,而不是隐藏它。

在窗体中添加一个类变量mFooterHeight,并在其中存储打开窗体时的页脚高度。

代码语言:javascript
复制
Private mFrmOptionsInitialHeight As Long

Private Sub Form_Open(Cancel As Integer)
    mFrmOptionsInitialHeight = Me.frmOptions.Height
End Sub

然后,您可以使用以下代码行来切换页脚的大小:

代码语言:javascript
复制
  Me.frmOptions.Height = IIf(Me.frmOptions.Height = 0, mFrmOptionsInitialHeight, 0)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64119085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档