如何将水平滚动条添加到VBA ListBox

时间:2009-05-08 01:32:42

标签: vba

我想将一个水平滚动条添加到VBA ListBox。

内置ListBox似乎不会自动添加水平滚动条。我有许多字段,其内容超出了ListBox的宽度,因此对用户来说是不可读的。

我发现this article,但由于访问了ListBox的hwnd(显然在VBA中不可用),代码失败了。我宁愿不写一个本机DLL来完成这个,因为我怀疑有更好的方法。

关于如何将水平滚动条添加到VBA ListBox的任何想法?

我愿意使用备用控件,而不是让它专门用于ListBox。

6 个答案:

答案 0 :(得分:4)

您是否尝试过ColumnWidths属性? 我有水平滚动条的列表框。我只需要添加ColumnWidths属性。

例如我有

e.Listbox1.Columnwidts ="0.5 in;0.2 in;1.5 in;0.75 in;0.5 in"

答案 1 :(得分:3)

除非我遗漏某些内容,否则如果其ColumnWidths属性的总和超出其自身宽度,VBA列表框将自动获得水平滚动条。

我知道没有影响此行为的属性,即我不知道如何强制或禁用水平滚动条的显示。

答案 2 :(得分:3)

如果列宽超过列表框的宽度,Access将自动添加水平滚动条。但是,如果您使用多个列,则第一列不能设置为0.您必须至少有一些值,即使它只有0.1“希望这会有所帮助。

答案 3 :(得分:0)

在那篇文章中,获取ScaleMode的唯一原因是设置水平滚动条的宽度。你不必这样做。

SendMessageByNum List1.hwnd, LB_SETHORIZONTALEXTENT, 800, 0

其中800是您希望列表框能够向右滚动的像素宽度。

你仍然需要hWnd。最好的办法是使用一个外部DLL(用VB编写),它可以通过你的进程的子窗口枚举,直到它找到列表框的windows类(你需要找到一些方法来唯一地识别它的父类,如窗口标题/文字或其他东西)。同样的DLL也可以执行上面的SendMessage调用来设置水平文本范围(也许它也可以测量包含的列表项的宽度)。

答案 4 :(得分:0)

可以按如下方式获取列表框的句柄: -

Dim ListHwnd As Integer lstboxName.SetFocus ListHwnd = GetFocus()

使用此ListHwnd作为sendmessage函数的第一个参数...

我们需要提供以下声明,因为默认情况下VBA中不存在GetFocus函数

私有声明函数GetFocus Lib“user32”()As Integer

答案 5 :(得分:0)

在Visual Studio 2017中,您可以单击列表框,然后转到属性面板,然后(向下滚动)找到“ Horizo​​ntailScrollbar”属性。默认情况下,此属性设置为false,因此应将其设置为true。

您知道,当列表框的右上角出现一个小三角形时,您已经正确设置了滚动条。

希望这会有所帮助。