C#/ Visual Studio 2008在“ListView”中分配“TopItem”属性不起作用

时间:2017-12-04 17:57:52

标签: c# listview visual-studio-2008 properties

我目前正在使用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”}

Before assignment statement

现在是赋值语句之后的值。

lvCompany.topItem {Text =“01563”}

foundItem {Text =“02057”}

After assignment statement

为什么将“lvCompany.TopItem”设置为“01563”????

在“TextBox”中输入“02”后,这是“ListView”。 “ListView”中的顶部项目中没有“02”。 “TopItem”是“01563”。

ListView display

1 个答案:

答案 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以下没有其他行向上移动。