当我的列表框有焦点时,我无法滚动表单

时间:2013-12-21 16:31:58

标签: vba ms-access ms-access-2007 access-vba

在Access 2007表单中,如果我的任何列表框都有焦点,我可以向上或向下滚动表单。要做到这一点,我必须将焦点移动到除列表框之外的任何其他控件,并且顺便说一下,我的所有列表框上只有4个项目没有滚动条,我只需要使用我的鼠标滚轮向上或向下滚动我的整个表格,即使我的列表框有焦点。

我发现以下代码用于禁用列表框滚动,但我无法测试它,因为我在列表框事件列表中看不到任何名为(mousewheel)的事件。

Private Sub ListBox1_MouseWheel(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles ListBox1.MouseWheel
Dim disable As HandledMouseEventArgs = e
disable.Handled = True
End Sub

此外,我不知道该代码是否会强制我的表单使用其滚动而不是列表框滚动。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

这是预期的行为。从MS的角度来看,他们希望人们使用他们的软件(即使是在他们的软件内部运行的软件)来获得一致的体验。访问有点过于原始,无法覆盖控制行为。 如果用户迷路,可能有一些方法可以重新设计表单(我个人讨厌滚动表单 - 我喜欢一些向导方法,一次向用户询问少量问题,以及用于显示信息的表单分隔信息,以便用户不会被数据淹没。)

答案 1 :(得分:0)

这个想法是将焦点从列表框移到文本框中。

  1. 将文本框放在列表框附近并按如下格式进行格式化:

    • 在“数据”标签下:Enabled = Yes; Locked = Yes
    • 在“格式”标签下:Width = 0

    必须启用文本框才能获得焦点。 “锁定=是”也应该阻止任何进入。现在将它放在列表框旁边可以作为文本框控件获得焦点时滚动的平板电脑

  2. 接下来将“点击”事件挂钩到详细信息。例如:

    Private Sub Detail_Click()
    
        select case(me.ActiveControl.Name)
            case "your list box name":  Me.myDummyTextbox.SetFocus
            '
            ' add more case as needed 
            '
        end select
    End Sub