我目前正在使用Visual Studio 2008支持一个C#桌面应用程序(计划很快升级)。
我有一个“列表视图”,其中包含超过3000个项目。由于这么多项目,我创建了一个“TextBox”,以便用户开始输入,并将匹配的“ListView”项目滚动到“ListView”的顶部。
我已经看到很多关于如何实现这一目标的帖子,问题是,据称可以完成这一要求的问题并不能始终如一地发挥作用。对于“ListView”,没有“组”和属性“ShowGroups”设置为“false”。我读“真实”的“ShowGroups”属性可能会导致问题。
我发现应该完成任务的代码如下。
private void txtSearchCompany_TextChanged(object sender, EventArgs e)
{
// Call FindItemWithText with the contents of the textbox.
ListViewItem foundItem =
lvCompany.FindItemWithText(txtSearchCompany.Text, true, 0, true);
if (foundItem != null)
{
lvCompany.TopItem = foundItem;
}
}
我已经介入了代码,但我很困惑的是,赋值语句只能偶尔使用。
例如,在“TextBox”中键入“02”,这里是赋值语句的断点和执行赋值语句之前的值。
lvCompany.topItem {Text =“00000”}
foundItem {Text =“02057”}
现在是赋值语句之后的值。
lvCompany.topItem {Text =“01563”}
foundItem {Text =“02057”}
为什么将“lvCompany.TopItem”设置为“01563”????
在“TextBox”中输入“02”后,这是“ListView”。 “ListView”中的顶部项目中没有“02”。 “TopItem”是“01563”。
答案 0 :(得分:0)
假装有一个列表视图,其中有4行可见。您使用10行信息(1到10)填充该列表视图。由于显示了4行,因此listview只能在顶部显示1到7,因为当总行数超过4时,需要7,8,9和10来显示完整列表视图。由于8不能移动到顶部,TopItem仍将包含listview顶部实际显示的内容,在本例中为7.因此,7,8,9和10都将显示7作为TopItem,因为listview不能进一步向上移动行。
如果列表视图未满或仅有4个项目,则同样如此。所以采取相同的listivew,让我们只用4个项目填充它。为此,TopItem将始终返回1,因为4以下没有其他行向上移动。