我在一个窗体上有两个并排的列表框,它们模拟Excel屏幕,左侧冻结在适当的位置。
第一个列表框将显示销售日期和客户名称。
第二个列表框将显示各种详细信息,因此可以水平滚动,而不会让客户名称看不见。
我设法使ListBox1.TopIndex = ListBox2.TopIndex。但只有当我点击它,选择一个项目,或移动鼠标在它上面时,才会发生这种情况。简而言之,使用任何可用的事件来激活该命令行。
我需要每当用户向上或向下滚动列表框时发生这种情况,但没有滚动事件。
现在,当我向下滚动listbox2时,listbox1保持静止。当我单击listbox2上的项目时,listbox1会刷新并与之对齐。
2条答案
按热度按时间h7wcgrx31#
Windows API在VBA中仍然非常有用,可以满足更复杂项目的需求。要在列表框中获取滚动条,请使用以下代码(适用于Excel 32位)。我只是警告说,使用“Windows挂钩”可能会带来意想不到的或不可预见的不稳定性,有必要评估是否适合在给定的项目中使用此资源。
在ListBox中移动所选内容的代码是“MouseProc”。其他的处理从/到Windows到Userform/ListBox的消息的拦截,以及何时开始或结束这些拦截(Hook/Unhook)。
重要提示:
如果您使用Excel 64位(在64位Windows下),则可以使用以下代码:
在其他重要的变化中,不仅对“声明”,而且对代码本身,请注意POINTAPI类型的剧烈变化。有必要创建一个专用函数来正确传递相应的数据。
dced5bon2#
这里有一个简单的选择(当我有同样的问题时,我没有立即想到)是使用一个单独的ScrollBar控件,其事件连接到两个ListBox控件。
你必须弄清楚如何连接所有的东西,这可能取决于列表框是否会显示一定数量的项目或可扩展。但是,它有所有的事件。