如何在Visual C++ .NET中获取ListView选中项?CLR项目技术求助
解决ListView选中项切换后StaffId显示异常的问题
嘿,我一眼就发现你代码里的关键问题了——你获取staffId的时候,用的是listView1->Items[0],这意味着不管你选中哪一项,程序都会始终取列表里的第一项的第二列内容!这就是为啥第一次选中(刚好点的是第一项)功能正常,后续切换选中其他项时,staffId完全没变化的原因。
给你修正后的代码,不仅解决了这个问题,还加了防空判断让代码更健壮:
private: System::Void listView1_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) { // 先检查是否有选中项,避免空引用报错 if (listView1->SelectedItems->Count > 0) { auto selectedItem = listView1->SelectedItems[0]; lblStafffName->Text = selectedItem->Text; // 取选中项的第一列(staffName) lblStaffId->Text = selectedItem->SubItems[1]->Text; // 取选中项的第二列(staffId) } else { // 当没有选中项时,清空标签内容 lblStafffName->Text = ""; lblStaffId->Text = ""; } }
修正说明:
- 统一使用
SelectedItems[0]获取当前选中的项,确保每次都取到用户实际选中的那一行 - 增加
SelectedItems->Count > 0的判断,防止用户点击ListView空白处取消选中时,程序因为访问空对象而抛出异常
内容的提问来源于stack exchange,提问作者noyruto88
相关产品推荐
相关产品推荐

