我想将一个水平滚动条添加到VBA ListBox。
内置ListBox似乎不会自动添加水平滚动条。我有许多字段,其内容超出了ListBox的宽度,因此对用户来说是不可读的。
我发现this article,但由于访问了ListBox的hwnd(显然在VBA中不可用),代码失败了。我宁愿不写一个本机DLL来完成这个,因为我怀疑有更好的方法。
关于如何将水平滚动条添加到VBA ListBox的任何想法?
我愿意使用备用控件,而不是让它专门用于ListBox。
答案 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中,您可以单击列表框,然后转到属性面板,然后(向下滚动)找到“ HorizontailScrollbar”属性。默认情况下,此属性设置为false,因此应将其设置为true。
您知道,当列表框的右上角出现一个小三角形时,您已经正确设置了滚动条。
希望这会有所帮助。