【问题标题】:ListView.Refresh 'clears' the listviewListView.Refresh“清除”列表视图
【发布时间】:2012-08-17 15:51:57
【问题描述】:

我的代码正在循环操作并向列表视图控件添加反馈。以前,我的代码运行正常,但今天发生了一些变化......

listview 控件开始时如下所示:

...但是在我调用 Update() 或 Refresh() 之后,它并没有显示我添加的项目,而是呈现如下:

此时,控件仍处于启用状态且可见。事实上,我的代码与它的唯一交互是添加新项目和 Update()。

要添加项目,我使用以下内容:

lvwDrawings.Items.Add(new ListViewItem(new string[]
{
    drawing.PartNo,
    drawing.Revision.ToString(),
    drawing.Issue,
    drawing.DrgTypeText,
    errorStatus !=null ? errorStatus : drawing.Status,
    drawing.Filepath
}));

如果我在这里引入了一些问题,我用更简单的lvwDrawings.Items.Add("test"); 进行了测试,但结果是一样的。如果我执行 QuickWatch,控件会正确告诉我它包含 x 个项目...

【问题讨论】:

  • 听起来像一个短暂的故障?尝试重新启动。尝试做一个完整的构建。尝试禁用任何其他可能影响系统窗口的程序。您是否更改了任何项目属性?添加任何新的参考?如果您创建一个新的空白项目并将代码粘贴到其中,是否会发生这种情况?
  • 我尝试重新启动VS,但没有任何变化。我现在尝试重新启动。发生了许多其他变化,但与此控件无关。我一直在尝试考虑可能值得怀疑的更改...
  • 你试过做一个 lvwDrawings.RedrawItems 吗?创建新的 ListViewItem 后,新项目是否有任何 null 属性?
  • @Dan-o - 不是短暂的故障 - 只是我的一个误会。 PEBCAK:en.wiktionary.org/wiki/PEBCAK

标签: c# regex file-io directory case-insensitive


【解决方案1】:

好的,我找到了问题 - 出于某种未知原因,我之前有 lvwDrawings.Items.Clear() 来清除不同运行之间的列表,但不知何故我最终得到了 lvwDrawings.Clear()。这不仅会清除列表视图中的项目,还会清除列。

这在两个方面很好奇:我会认为,当我尝试添加具有特定列的 ListViewItem 时,当没有任何列时它会反对,而且,我到底认为我在做什么时我做出了改变(??!)。

比较有趣的转移:

我通过在第一个列表视图下方创建第二个列表视图来发现问题,并一直工作直到遇到问题。作为该过程的一部分,我在设计中添加了列,其中一个我称为Path,设计师没有反对。

但是,在代码中,对静态类 Path 的方法(例如 Path.GetDirectoryName())的引用导致错误 - 'ColumnHeader Path 没有方法 'xxx'' 或类似的。显然,它假定当我提到 Path 时,我指的是列表视图中的列。

此外,当我重命名该列(为“FullPath”)时,它重命名了代码中对 Path 的所有引用,例如。 FullPath.GetDirectoryName()....

【讨论】:

  • 很好地诊断和解决了您的问题!很高兴看到人们锻炼他们的调试技能。
  • 哦,我的调试技巧得到了足够多的练习。可悲的是。 ;)
猜你喜欢
  • 2011-04-17
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
相关资源
最近更新 更多