ListView.SelectedIndexCollection lvsic;
lvsic = this.listView.SelectedIndices;
lock (this)
{
lvsic = this.listView.SelectedIndices;
...
}上面是一段放在自定义控件类里面的代码,this代表用户控件,listView是这个控件里面的一个ListView。
请问各位大虾:
为什么两个相同的语句lvsic = this.listView.SelectedIndices;得到的结果却不同呢?
第一次执行后lvsic的IndicesArray的长度为1,
第二次执行后lvsic的IndicesArray的长度为0。很奇怪吧,是不是.Net 2003的一个bug呢?//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
MSDN中对SelectedIndices的注释:
ListView.SelectedIndices 属性
获取控件中选定项的索引。
[C#]
public ListView.SelectedIndexCollection SelectedIndices {get;}属性值
ListView.SelectedIndexCollection,包含选定的项的索引。如果当前没有选定的项,则返回空 ListView.SelectedIndexCollection。备注
当 MultiSelect 属性设置为 true 时,此属性返回一个集合,该集合包含 ListView 中的所有选定项的索引。对于单项选择 ListView,此属性返回一个包含单个元素的集合,该元素包含 ListView 中唯一选定的项的索引。有关可以对集合中的项执行的任务的更多信息,请参见 ListView.SelectedIndexCollection。如果您要获取 ListView 控件中选定的项的集合,而不是选定项的索引位置,请使用 SelectedItems 属性。
但是我每次调试都是这个结果,如果运行的话,后面有条调用SelectedIndices[0]的语句就会报错。
每次change时都回激发2次selelctindiceschanged事件
Object obj = new Object();
...
ListView.SelectedIndexCollection lvsic;
lvsic = this.listView.SelectedIndices;
lock (obj)
{
lvsic = this.listView.SelectedIndices;
...
}这样写两次lvsic的值就是一样的了。
有兴趣的可以看看.Net2005对lock的注释。