如何将组合框视为另一个表单的链接?

Posted

技术标签:

【中文标题】如何将组合框视为另一个表单的链接?【英文标题】:How to treat a combobox as a link to another form? 【发布时间】:2018-05-04 16:27:18 【问题描述】:

我一直在努力尝试修改组合框以将当前选定的项目视为指向另一个表单的链接。

基本的工作流程很简单;当不从列表中选择新项目时,我希望组合框中的文本像链接一样起作用。此链接将打开一个新表格,并找到相关记录。 IE。单击客户名称以打开客户表单并显示他们的信息。

问题是特定于组合框的;相同的功能适用于文本框。将代码放入 Click 事件中,表单打开,转到正确的记录,轻松。我应该可以用组合框做同样的事情,对吧?

不。 Combobox only fires when selecting a new item from the list 上的 Click 事件。它说,Clicks a control with the left mouse button. Clicking a control with the right or middle mouse button does not trigger this event.,但点击时它什么也没做。

好的。让我们将其设置为超链接。那应该触发 Click 事件!没有。它首先尝试遵循“链接”,并且由于该值是内部主键,因此它不知道如何处理它。所以它会出错,并且无处可去。

现在我的尝试变得更加深奥。让我们在组合框后面隐藏一个矩形,并将代码放在它的 Click 事件中!没有。不会流到后面的物体。让我们把它放在下拉列表的顶部!没有。仍然不会触发矩形的 Click 事件。

好的,去掉矩形。让我们尝试将代码放在 Combobox 的 MouseUp 事件中。答对了。现在单击文本即可。但是......现在每次我点击它都会这样做。当我尝试选择其他客户时,我不希望它打开表单。

我试过detecting when the dropdown is expanded,当它返回真时没有点击链接。那......有点作品。它现在不会关闭展开的下拉菜单,也无法调试它,因为检测代码级别较低,显示调试屏幕使其返回 false(因为下拉菜单不再打开)。

我尝试设置一个静态变量,使其仅在不选择新项目时跟随链接。这非常不一致,因为没有好的方法可以确定组合框处于什么状态。

将文本转换为可点击的链接不应该这么难。如何使组合框中当前选定的项目成为链接,而不同时使组合框中的其他所有内容成为链接?我错过了什么活动吗?

【问题讨论】:

试图跟随你正在尝试做的事情,它希望你能启发。您如何确定用户在单击组合框时是否只想单击或展开列表?那你怎么知道他们是想使用当前客户还是选择新客户? 当然 - 效果很好 - 如果它有效,请标记为答案,或者对您的帖子有帮助的任何 cmets 或答案进行投票。 【参考方案1】:

我想我有一个适合你的解决方案,因为我了解你想要做什么。

要设置表单覆盖一个文本框(我使用Text3)在您的组合框顶部(我使用Combo0)下拉区域使向下箭头可见。

此外,我还为Shape Outline 颜色设置了文本框属性,这样我就可以明显地判断它是否正常工作。对于组合框 - 我还单击了 Arrange - 到 Send To Back,因此它将隐藏在文本框后面。

无论何时更改组合框(通过单击其箭头),它也会设置文本框的值 - 如果需要,可以将其设置为超链接

1.显示文本框,但组合框箭头可见

2。已单击组合框箭头以显示下拉菜单

3。点击文本框会在点击事件或超链接中生成代码

VBA 表单示例

Private Sub Combo0_AfterUpdate()
    Debug.Print "Updated"
    Text3 = Combo0.Value
    Text3.Visible = True
End Sub

Private Sub Combo0_Click()
    Debug.Print "Clicked"
    Text3.SetFocus
End Sub

Private Sub Combo0_Enter()
    Debug.Print "Enter: " & Combo0
    Text3.Visible = False
End Sub

Private Sub Form_Current()
    Text3 = Combo0.Value
    Text3.Visible = True
    Text3.SetFocus
End Sub

【讨论】:

有趣。我没想过在上面放一个文本框。我必须尝试一下,看看它是如何工作的。 让我们知道测试进展如何 我的测试表明这会起作用。不幸的是,组合框不能开箱即用地做到这一点,但我想不管怎样。【参考方案2】:

我进行了一次快速测试,结果符合我的预期:

Private Sub Combo14_Click()

Select Case Combo14
    Case Is = "Form1"
        DoCmd.OpenForm "Form1"
    Case Is = "Form2"
        DoCmd.OpenForm "Form2"
    Case Is = "Form3"
        DoCmd.OpenForm "Form3"
    Case Is = "Form4"
        DoCmd.OpenForm "Form4"
End Select

End Sub

编辑:

然后在 GotFocus 事件字段中试试这个。

Private Sub Combo14_GotFocus()

Select Case Combo14
    Case Is = "Form1"
        DoCmd.OpenForm "Form1"
    Case Is = "Form2"
        DoCmd.OpenForm "Form2"
    Case Is = "Form3"
        DoCmd.OpenForm "Form3"
    Case Is = "Form4"
        DoCmd.OpenForm "Form4"
End Select

End Sub

注意:您需要将焦点移到 sub 末尾的其他内容上。

【讨论】:

这是您选择一个项目的时候。我希望它在已选择的项目上工作,而不展开下拉列表。 更新了答案。 展开列表框时也会出现这种情况。请完整阅读我的问题;我希望该链接仅在单击组合框的实际文本时才有效。

以上是关于如何将组合框视为另一个表单的链接?的主要内容,如果未能解决你的问题,请参考以下文章

如何从同一表单中的另一个组合框填充组合框?

打开表单的组合框

MS Access 如何使用带有组合框的宏?

如何根据另一个的选定项目过滤一个组合框集合?

将组合框设置为另一个组合框的值 - Access Vba

访问报告中的绑定组合框为空