2011-05-02 50 views
11

我在excel用户界面中遇到的一个杀手问题,因为只要我记得,就是用listbox滚动。如何修复无法将最后一个元素滚动到视图中的Excel列表框

如果在可显示的列表框中有更多元素,则会出现一个scoll栏。然而,在某些情况下,将栏一直滚动到列表底部并释放它,会使栏向上“跳”一个档位,并且您将无法看到列表中的最后一项。这在这里说明: Can't scroll all the way down

有很多论坛帖子提出这个问题,并且解决方案一直是“将整体高度属性设置为false,然后再次设置为true”。这样做会略微调整列表框的大小,使其高度被圆化为单行的高度,然后不隐藏任何项目。

With lstbox 
    .IntegralHeight = False 
    .Height = myHeight 
    .IntegralHeight = True 
End With 

但是,在某些情况下,这不起作用。如果你是:

  1. 通过编程设定使用简单的列表框选择(fmMultiSelectSingle)

然后整体高度后或变化之间简单地设置为false,然后真正的你的列表框

  • 的高度到高度将调整您的列表框的高度,但是当您向下滚动时,问题将保持不变 - 最后一项无法看到。

    这个令人沮丧的问题的关键在于,虽然互联网上的其他人都在确认'integralHeight'解决方案适用于他们,但这些非常特殊的情况令人沮丧,他们想知道为什么它不适合他们。那么他们如何得到他们的修复?

  • +0

    任何有关我如何提出问题和提出的解决方案的反馈,或者我是否可能忽略了其他方面都是值得欢迎的。 – Alain 2011-05-02 16:22:41

    回答

    10

    我不得不为自己发现的东西以及在其他任何地方都找不到的东西(这就是我在此发布的原因),是因为这个问题的另一个方面是依赖于选择方法。虽然我无法理解滚动条的工作方式不仅与高度和积分高度属性有关,还与.MultiSelect属性有关,但我发现它的确如此。

    当如上所示的.IntegralHeight方法不起作用,下面的方法以某种方式作用:

    With lstbox 
        .IntegralHeight = False 
        .Height = myHeight 
        .IntegralHeight = True 
        .MultiSelect = fmMultiSelectSingle 
        .MultiSelect = fmMultiSelectExtended 
    End With 
    

    通过简单地改变.MultiSelect属性fmMultiSelectSingle,然后恢复回所需的选择样式,所述列表框的高度将被.IntegralHeight属性自动调整到一个稍微不同的高度时,不执行这些动作比 - 滚动条的差异导致正常工作:

    Workaround worked

    我希望发现这种特殊情况和更精确的解决方法可以节省一些我不得不经历的挫折和实验时间。

    -1

    我以前在论坛上看到的只是在列表框中添加一个额外的空白行。这应该做到这一点。

    +1

    我没有downvote,但是当这个不可接受的例子是当你的列表框被绑定到一个命名范围时,它不仅仅用于列表框。改变数据源并强制使用该数据源的其他代码必须考虑最后一行的空白是不合理的。这也意味着任何对列表框中的选定项目执行操作的例程必须由我来检查是否选择了有效的项目。 – Alain 2011-05-03 15:47:08

    -1

    只需设置积分高度属性为True

    +0

    在问题和去年发布的解决方案中明确指出这是不够的。 – Alain 2012-02-15 15:58:28

    1

    在我的情况的解决方案是这样的方法:

    with listbox 
        .IntegralHeight = False 
        .Height = myHeight 
        .Width = myWidth 
        .IntegralHeight = True 
        .Height = myHeight 
        .Width = myWidth 
    end with 
    

    享受。

    2

    我不得不锚的位置,因为我的列表框走跨页:

    With ListBox1 
    .IntegralHeight = False 
    .IntegralHeight = True 
    .Height = 45 
    .Width = 69 
    .Top = 0 
    .Left = 1255.5 
    End With 
    
    1

    With lstbox

    `.Height = myHeight` 
    `.MultiSelect = fmMultiSelectExtended` 
    `.MultiSelect = fmMultiSelectSingle` 
    

    End With

    这为我工作。无需设置积分高度属性

    +0

    仅当IntegralHeight已设置为True时才可以使用。 – ricovox 2016-03-25 20:00:27

    0

    发现可笑的简单方法来解决这个问题。调整你的身高向上或向下列表框中的那么一点点的底线是复选框之间,那么你就可以下来,即使IntegralHeight设置为false

    +0

    在接受的答案中写道,调整身高并没有帮助。你能提供更多细节吗? – bish 2015-07-10 04:19:39

    0

    感谢阿兰滚动到最后一个项目。您的修复对我而言效果很好。

    我发现相关的列表框的高度的后续问题调整大小时,它在根据初始高度不可预测的方式变化。在另一台具有125%文本缩放比例的计算机上显示时,调整大小的高度会有所不同。例如,如果我将高度设置在358和370之间,则调整后的高度在我的机器上为370.65或371.4,但在具有125%文本缩放的机器上为360.1,370.25或380.45。由于如此大的变化,结果是ListBox可能会掩盖它下面的其他控件。

    此修复程序是先从我想要的最大高度,降低了初始高度,直到调整高度低于我想要的最大高度。每当我显示ListBox时,我都会这样做。

    Hmax = 372  'Target Height 
        H1 = Hmax 
        With SteelForm.Controls.Item("ListBox1") 
         Do 
          H1 = H1 - 1 
          .IntegralHeight = False 
          .Height = H1 
          .IntegralHeight = True 
          .MultiSelect = fmMultiSelectSingle 
          .MultiSelect = fmMultiSelectExtended 
          DoEvents 
         Loop Until .Height < Hmax 
        End With 
    
    0

    我知道这是很旧的帖子。 但我已经通过很多解决这个问题,所以我只是想分享我的提示。 :)

    首先, integralheight方法不工作时缩放级别不是100%的工作。

    它会改变列表框的高度和宽度,位置等(即使你设置对象属性“不动或细胞夺回”)

    ,当你尝试把它原来的大小和位置用代码来解决这个问题,这个时候它的最后一个项目不能被看作

    我的小费也很简单。 有字体大小和列表框高度的组合。如果你的字体大小是6-10(arial,regular),列表框的高度和12.75的倍数一致(btw我的列表框的样式是1:ListStyle,1-fmListStyleOption,它可能与样式0不同)

    只要高度与12.75这些倍数相同,就不会有问题。

    在字体大小12(Arial字体,常规)的情况下,它的倍数的13。55

    因此,如果您的项目中没有关于列表框大小的重新调整,只需根据字体大小稍微调整大小即可获得更大的舒适度。 :)

    相关问题