只有添加足够的行才能启用垂直滚动条,才会显示ClistBox(ClistBox doesn't display until enough lines are added to enable the vertical scroll bar)
IT问题网 2021-02-18 00:00:00
问 题
我有一个应用程序可以在列表框中添加行,以便用户可以看到发生的情况。但是,该框"消失",只显示水平滚动条,直到添加了足够的行,以便启用垂直滚动条。那时所有添加的行都会显示出来。我已经尝试设置顶部索引,看看是否会让事情发生变化,它确实有所帮助。实际上,它是顶级索引的设置,可以显示任何内容。在此之前,显示区域将"消失",直到添加了所有行,然后它们都将被显示。此外,settopindex似乎不起作用。例如,如果我将顶部索引设置为8,我希望我添加的第九个字符串是框中第一个显示的行。但是,我设置的索引和显示的行之间似乎没有任何关系。相反,盒子仍然是满的。这是可以接受的,因为用户能够看到添加的最新行,但它肯定不是我要求的。
如果"disablenoscroll"设置为是的,然后盒子不会"消失"。它只是空位,直到盒子比它可以容纳一行更多,然后垂直滚动条与所有等待显示的行一起出现。
解决方案
在windows中重绘是低优先级...因此,如果你在紧密循环中添加很多项目,你将得到一个像你一样的结果。
出现滚动条时出现redrawind的原因与列表区域大小更改的事实有关。我几乎可以肯定,如果总是显示滚动条,它会产生类似于没有滚动条的效果。
如果你有很大的列表,你是如果可能的话,更好地使用控件的虚拟模式。
否则,你总是可以强制更新列表框,你可以mofify你的代码来处理windows消息或使用多线程使得ui线程不是百分之百忙碌的时间。
最佳解决方案取决于大量的项目,如果你想要自动滚动或没有和列表填写的速度。
通常你必须在加载速度和用户界面的响应能力之间找到折衷方案。
如果你一次添加很多项目(禁用更新),然后刷新所有内容......例如每一秒钟。
检查另一个(类似)问题的答案。如果你没有为ui和生成文本的东西使用单独的线程,这可能会有所帮助。
更新列表框visual c ++[ ^ ]
分享: