目前在我的情况下,我的列表框有75000项,滚动时我在滚动事件上设置topindex值。但是在存储超过65536之后,它又回到了起点。 由于ListBox.TopIndex数据类型是Int,所以它再次从零开始设置topindex,但我需要在其中存储70000或75000以设置顶部索引,因为我的列表框包含超过70000个项目。
可以设置吗?
答案 0 :(得分:0)
正如您在评论中提到的,使用文本框过滤列表应该是一种有用的方法,可以使大型数据集合理地为您的用户处理。在这种情况下,您将必须处理文本框的TextChanged事件。由于您将不断更改列表框的数据源,因此无法跨过滤镜更改存储索引,您需要跟踪当前选定的或顶部文本值以维护列表中的透视图。
这是一个示例处理程序,它应该为您提供一个起点(dataItems是您的主项目列表):
private void textBox1_TextChanged(object sender, EventArgs e)
{
bool isSelected = listBox1.SelectedIndex != -1;
string current = "";
if (isSelected)
current = listBox1.SelectedItem.ToString();
listBox1.BeginUpdate();
if (String.IsNullOrWhiteSpace(textBox1.Text))
listBox1.DataSource = dataItems;
else
listBox1.DataSource = dataItems.Where(x => x.StartsWith(textBox1.Text)).ToList();
if (isSelected)
listBox1.SelectedItem = current;
listBox1.EndUpdate();
}