相反的组合框.Dropdown方法?

时间:2012-01-12 18:18:52

标签: ms-access

有没有办法通过VBA切换组合框的下拉列表? .Dropdown是一种方法,它只适用于一个方向。我正在寻找以下功能:

MyCombo.Dropdown = True
MyCombo.Dropdown = False

显然上面的内容在MS Access中不起作用。我猜我需要使用某种黑客/解决方法。我想避免使用.Requery。这可能会有效,但可能会有一个主要的性能损失取决于组合框的来源。

6 个答案:

答案 0 :(得分:2)

如何将焦点设置为表单上的另一个控件?这应该关闭组合框,就好像用户已将焦点移动到表单上的其他位置一样。

答案 1 :(得分:2)

我今天正在处理此问题,经过大量的试验和错误,我发现以下内容在Access 2010中可以很好地工作:

With m_cboLookup
    .ListWidth = .ListWidth    ' Close combo box
    'If Len(strSearch) > 3 Then .Dropdown
End With

基本上,您只是将列表宽度设置为现有列表宽度,但是组合框已关闭,大概是为准备使用其他尺寸的重绘做准备。

答案 2 :(得分:1)

我也正在处理这个问题。我能想到的最好的方法如下。它发送两次ALT键,这将关闭组合框,而不会触发撤消或将焦点移到另一个控件。

SendKeys "%"
SendKeys "%"

答案 3 :(得分:0)

你有没有想过

SendKeys "{TAB}"

不需要您将焦点发送到任何特定控件,但会将焦点从这个控件移开

答案 4 :(得分:0)

我已尽一切努力来实现所需的组合框行为。我终于找到了一种对我有用的方法。太复杂了,无法成为理想的解决方案,但是它确实有效。我尝试了Adam的listwidth重置方法,但在Access 2013中对我不起作用。我尝试了Sendkeys方法,但是这导致我的客户的Num Lock被关闭。这段代码为我提供了完美的组合框行为。

'The following code goes in a non-class module.
Public booListOpen As Boolean

Public sub subDropDown()

    If booListOpen = False Then
        Screen.ActiveControl.Dropdown
        booListOpen = True
    End If

End Sub

'The following code goes in the form module.
Private Sub cboList_Enter()

    booListOpen = False

End Sub

Private Sub cboList_Change()

    subDropDown

End Sub

Private Sub cboList_Click()

    booListOpen = True

End Sub

答案 5 :(得分:0)

我知道这是一个旧线程,但是我遇到了同样的问题,并尝试了几种解决方案。 .ListWidth对我不起作用。它确实关闭了下拉列表,但是在下拉列表关闭后,它在组合框的“文本框”部分中显示了绑定列的值(ID)。我的也是绑定到多值字段的多选组合框;可能与OP不同。

我能够通过执行.Requery

来解决它