ListBox.TopIndex无法存储70000,因为其数据类型为int

时间:2015-12-03 14:03:29

标签: winforms listbox

目前在我的情况下,我的列表框有75000项,滚动时我在滚动事件上设置topindex值。但是在存储超过65536之后,它又回到了起点。 由于ListBox.TopIndex数据类型是Int,所以它再次从零开始设置topindex,但我需要在其中存储70000或75000以设置顶部索引,因为我的列表框包含超过70000个项目。

可以设置吗?

1 个答案:

答案 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();
    }