ListView无法选中复选框

时间:2009-06-29 22:19:02

标签: c# listview

这是一个奇怪的问题,我没有添加太多代码,因为我不知道要启动。我在虚拟模式下有一个listview控件,如果我过滤listview以显示所有名为John的人,然后我看到3个用户叫John,然后取消过滤器设置所有值为null并将所有数据返回到listview,我现在列表中有几百个项目,但除非我向下滚动列表视图,否则我只能在屏幕上看到30个项目。

然后我使用下面的代码来检查每行中的一个复选框,所有这些都从3个Johns中分开检查但是如果我可以在列表视图中看到3个Johns中的1个而不滚动然后运行下面的代码,则可见约翰被检查。

 for (int i = 0; i < this._items.Count; i++)
            {

                    this._items[i].Checked = true;
            }

我在上面的代码中检查了复选框的状态,如果John可见,则复选框认为它未被选中(false),如果它不可见,则相信它被选中(true)。因此,在屏幕上显示一个可见的John,复选框看起来未经检查,并且运行测试证明它未被检查,因为两个Johns我看不到他们认为他们被检查但是如果我向下滚动所以我可以看到他们不是。< / p>

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

虚拟模式下的开箱即用的.NET ListViews(WinForms) 不支持复选框。它们不可靠地工作并产生奇怪的错误。我从来没有见过你所描述的那个,但这并不让我感到惊讶。

您的解决方案是:

  1. 使用非虚拟ListView
  2. 使用ObjectListView,它支持虚拟列表上的复选框

答案 1 :(得分:0)

我遇到了完全相同的问题而且我没有进入虚拟模式。我在调试模式下运行程序,但是通过指令:

listView1.Items [count] .Checked = true;

执行

('count'是一个功能计数器),我的listview中的复选框将不会被检查。有时,其中一个或两个将没有明显的原因,虽然读取所有想要检查的复选框的行...

我对任何亮点都很感兴趣!

谢谢你, 克里斯托夫