C# Listbox RemoveAt方法导致自动滚动
简而言之:当我调用RemoveAt(0)时,如何禁用自动滚动回列表框顶部 背景:C# Listbox RemoveAt方法导致自动滚动,c#,listbox,autoscroll,C#,Listbox,Autoscroll,简而言之:当我调用RemoveAt(0)时,如何禁用自动滚动回列表框顶部 背景: 我有一个简单的列表框,每隔一段时间我会将所有数据混合在一起 基本上我用的是一个状态报告工具 我的程序每次迭代都会导致100行左右的数据被抛出到列表框中,而将成堆的信息转储到列表框中的最佳方法是始终将其添加到列表框的底部 我希望最新的结果在底部,最旧的结果被“推上”。因为这个列表框的大小在短时间内变得相当大,所以我将其大小限制为1000个项目 当盒子中的物品超过1000件时,我使用RemoveAt(0),直到我再次获
我有一个简单的列表框,每隔一段时间我会将所有数据混合在一起 基本上我用的是一个状态报告工具 我的程序每次迭代都会导致100行左右的数据被抛出到列表框中,而将成堆的信息转储到列表框中的最佳方法是始终将其添加到列表框的底部 我希望最新的结果在底部,最旧的结果被“推上”。因为这个列表框的大小在短时间内变得相当大,所以我将其大小限制为1000个项目 当盒子中的物品超过1000件时,我使用RemoveAt(0),直到我再次获得1000件物品 为了始终显示最相关的信息,我向下滚动列表框。问题在于,每当我调用RemoveAt(0)时,该框都会自动滚动回新的项0。基本上,每次我将项目添加到“完整”列表框时,其效果是快速向上滚动1000个项目,然后向下滚动1000个项目,从而形成一个笨拙的显示效果
当我调用RemoveAt(0)时,如何禁用自动滚动返回列表框顶部?我无法回答您的问题。即使我知道这项技术,我也可能没有一个能满足你需求的答案。问题的一部分是你在问“帮助我以我试图解决它的方式解决这个问题”,而不是“这就是业务问题,什么是最佳解决方案” 我的建议是:回到核心问题上来,这听起来像是“我需要一种用新事件更新‘列表’的方法,同时将列表保持在1000项或更少”。由此,您可以将列表框的解决方案附加到底部,并从顶部清除,作为您的解决方案。而且,我不知道如何在您的解决方案中关闭滚动,但我不相信这是解决业务问题的唯一方法 分解后,有几个问题需要回答:
最后一个建议是,看看其他人是如何解决显示流数据的问题的。遵循一个众所周知的模式是一个好主意,因为它为用户提供了一个熟悉的界面。通常,对于流数据,流有一组非常小的行(足以填满一个屏幕,而不是1000行),但如果需要,允许您返回并查看以前的“记录”事件。再一次,我不确定您的解决方案是否需要流式解决方案,但您仍然应该回到核心业务问题并从那里开始。只有在没有选定项目时才会发生这种情况。或者换句话说,ListBox.SelectedIndex=-1。简单的解决方法是选择一个项目。与上一个一样。取决于您的平台--winforms、silverlight、wpf、asp.net(等)Microsoft Visual C#2008 Express(winforms)不确定这是否可行,但请尝试调用
列表框。在调用RemoveAt(0)
之前,请先开始更新。然后将所选项目设置为列表中的最后一项,最后调用EndUpdate
。这将阻止列表框在调用EndUpdate
之前进行更新。@Jim,这很有效,效果很好!没有闪烁,漂亮干净,这就是我正在实现的!感谢您的贡献,我将研究更好的方法来显示更新流。我的问题的目的是了解调用listbox.RemoveAt winforms方法时会发生什么,以及如何修改该行为。这起作用并解释了listbox删除项时会发生什么。这实际上停止了无关的滚动,而不仅仅是隐藏它。然而,我正在执行吉姆的建议,使事情看起来更好。