4

在 Access (2002 / 2003) 数据绑定表单中,转动鼠标滚轮会移动到下一条/上一条记录,即使光标位于多行文本字段或列表框内。这对用户来说是一个主要的烦恼,不能轻易关闭。

我最近发现了一个名为 MouseHook ( http://www.lebans.com/mousewheelonoff.htm ) 的 DLL,它可以有效地阻止这种鼠标滚轮行为并将其替换为更多预期的行为。

但是,当将外部 ActiveX 控件添加到 Access 窗体时,此模块不执行任何操作。例如,我有一个带有 FlexGrid 控件的表单,它可以包含很多行。当用户尝试使用鼠标滚轮滚动时,Access 再次只是转到另一条记录,即使加载了 MouseHook DLL。

是否有类似 MouseHook DLL 但也适用于外部 ActiveX 控件的解决方案?或者 MouseHook DLL 的源代码是否可用,以便可以对其进行修改以处理像 FlexGrid 这样的控件?

PS:我想问一下 MouseHook DLL 的作者,但他目前“暂停”到 2009 年 6 月。

4

4 回答 4

1

如果您真的必须更改 UI 并更改用户期望鼠标滚轮工作的方式,我实际上建议您禁用它而不是更改它的滚动方式。虽然它的滚动对您来说可能看起来很奇怪,但这就是程序的工作方式。如果您必须整天阅读 PDF,然后有一天有人认为鼠标滚轮滚动的工作方式不够好并更改为默认为巨大的跳跃或水平或其他方式,您会怎么做。是的,它可能是一个更好的解决方案,但是它对用户来说很烦人,因为它没有做它应该做的事情。

于 2008-11-13T07:42:41.597 回答
1

为什么在 Access 中使用 flexgrid?对我来说,这是一个读取标志,您可能正在以与 Access 敌对的观点来处理该项目,因为您似乎选择非本机控件来执行几乎总是使用 Access 的本机控件更容易完成的事情。

于 2008-11-14T04:15:04.927 回答
1

钩住 flexgrid,拦截 WM_MOUSEWHEEL 消息,忽略它并调用您的预期行为。

于 2008-11-20T07:08:27.803 回答
0

不是直接回答您的问题,但我们处理鼠标滚轮移动的方式是防止用户开始编辑后意外更改记录。当用户打开表单时,轮子会像往常一样随意移动记录。一旦用户在字段上编辑某些内容,然后移动鼠标滚轮,就会触发 BeforeUpdate 事件,这会导致我们的代码提示他们必须先保存记录。我们有一个保存按钮,用户必须明确按下该按钮才能抑制更新前事件中的警告。

于 2008-11-12T22:50:09.877 回答