【发布时间】:2015-10-04 12:26:52
【问题描述】:
我有一个包含初始项目数的列表框,它有垂直滚动条。
我已经实现了以下行为:如果我移动(按住鼠标左键)滚动到滚动条的末尾,那么一些新项目将添加到 Listbox 控件中。问题是只有当我鼠标左键向上时,列表框的滚动条才会更新(相对于新的列表框项目计数)。但我需要在将新项目添加到列表框后立即更新它,而无需停止向下拖动鼠标。
我想要的正确行为示例:https://www.google.com/fonts。 如您所见,如果您向下拖动滚动条,它会立即更新并在每次加载新项目时向上跳转多个位置。
所以,我的问题是:如何在不使用 3rd 方列表框控件的情况下正确实现此类行为?
编辑:
在我的 Form1 表单控件中,我确实通过测试滚动位置来加载新项目:
public Form1()
{
InitializeComponent();
...
var timer = new System.Windows.Forms.Timer();
timer.Interval = 500;
timer.Tick += TimerCheckForListItemsScrollDown;
timer.Start();
}
private void TimerCheckForListItemsScrollDown(object sender, EventArgs e)
{
if (listBox1.Items.Count < 1)
{
return;
}
int visibleCount = listBox1.ClientSize.Height /
((MyListItem)(listBox1.Items[0])).ItemHeight + 1;
if (listBox1.TopIndex == 0)
return;
if (listBox1.TopIndex + visibleCount > listBox1.Items.Count - 5)
{
InsertNextBucketOfListItems();
//I try to invalidate and refresh control but with no positive results, while I hold left mouse button down nothing happens.
listBox1.Invalidate();
listBox1.Refresh();
}
}
编辑 2: 我在下面添加了我的解决方案。
【问题讨论】:
-
你有没有尝试过?这个地方更多的是针对您尝试过的代码的特定问题,而不是通用方向,这更适合 google。
-
我从项目中添加了一些代码示例,我做了什么,但没有结果。现在我只是试着找到正确的方向我应该如何解决我的问题。
-
识别使用触摸屏操作的 UI 非常重要。使鼠标从桌子上掉下来或手指从触控板上掉下来的程序是没有用的。