干练的茶壶 · 负鼠(负鼠目、负鼠科动物的通称)_百度百科· 4 月前 · |
含蓄的罐头 · 知识星球ayawawa剪石布测试(彗星:oi ...· 10 月前 · |
鼻子大的脆皮肠 · 【全国3年以下3-5万二手东风风神】全国3年 ...· 1 年前 · |
气势凌人的仙人掌 · 氟利昂压缩机工作原理_抖抖音· 1 年前 · |
耍酷的抽屉 · 女生不穿bra出门是什么感受?· 1 年前 · |
我已经找了一个小时了,找不到最好的解决办法。我正在从VB.NET迁移到C#窗体和C# WPF。算了吧..。因此,我为C#窗体使用了这段代码,它可以工作,但在C# WPF中不起作用。
if (ListView1.SelectedItems.Count > 0)
for (lcount = 0; lcount <= ListView1.Items.Count - 1; lcount++)
if (ListView1.Items[lcount].Selected == true)
var2 = lcount;
break;
}
这就是我希望在列表框中单击项目索引的方式。我在.SELECTED中有错误
请帮帮忙。
你可以从
SelectedIndex
那里得到listView。无需遍历所有项,因为根据您的代码,您似乎对任何选定项的索引感兴趣。
var2 = ListView1.SelectedIndex;
或
简单地说,如果只对第一个索引感兴趣,这将有效:
if (lst.SelectedItems.Count > 0)
var2 = lst.Items.IndexOf(lst.SelectedItems[0]);
}
对于Visual 2015,
SelectedIndex
似乎不可用。相反,您可以使用
SelectedIndices[x]
,其中
x=0
将为您提供第一个选定的项:
listView.SelectedIndices[0]
还可以将
MultipleSelect
属性设置为
false
,一次只允许选择一个项。
为什么不把SelectedIndex带回来?在当前命名空间之后添加此扩展名。
public static class Extension
public static int SelectedIndex(this ListView listView)
if (listView.SelectedIndices.Count > 0)
return listView.SelectedIndices[0];
return 0;
}
将这个类封装在一个名为扩展的名称空间中,然后在您的项目命名空间中添加这个类以使用扩展。
using Extensions;
然后像这样简单地使用
private void ListView1_SelectedIndexChanged(object sender, EventArgs e)
int selectionindex = ListView1.SelectedIndex();
ListViewItem seletedItem = ListView1.Items[selectionindex];
}
扩展方法应该返回-1 on Else,但是只要您从SelectedIndexChanged事件中使用它,就可以了,因为如果没有条目,它就不会被触发。这是设计的,因为SelectedIndexChanged事件会被触发两次。一次取消选择初始项,然后选择新项。正确的方法是返回-1并检查是否为负数。这也是为什么这里有人得到和ArgumentOutOfRange异常。
如果使用的是.NET紧凑型框架,则不支持
SelectedIndex
。对于一般的解决方案,我更喜欢
SelectedIndices
ListView.SelectedIndexCollection indices = lst.SelectedIndices;
if (indices.Count > 0)
// Do something with indices[0]
}
它可以返回NULL。另外,SelectedIndexChanged事件可以被触发两次。第一次,还没有任何选择。
所以找到它的唯一安全方法是这样的:
private void lv1_SelectedIndexChanged(object sender, EventArgs e)
if (lv1.FocusedItem == null) return;
int p = lv1.FocusedItem.Index;
..。现在int p有正确的值..。
sColl.Clear();
string item = String.Empty;
if (listView1.SelectedItems.Count > 0) {
for (int i = 0; i < listView1.SelectedItems.Count; i++) {
if (listView1.SelectedItems[i].Selected) {
int i2 = listView1.SelectedItems[i].Index;
item = listView1.Items[i2].Text;
sColl.Add(item);
listView1.SelectedItems.Clear();