ListView虚拟模式下选中项后点击OK按钮无法获取选中值如何解决
解决ListView虚拟模式下获取选中项值的方案
核心逻辑
开启VirtualMode时,ListView本身不存储全量数据,所有数据都保存在你自定义的数据源myData中,直接通过选中项的索引从数据源取值即可,无需调用FindItemWithText方法。
修改代码
1. 改造OK按钮点击事件
// 首先建议在窗体类中定义公共属性,方便外部拿到选中值 public string SelectedItemValue { get; private set; } private void OK_button_Click(object sender, EventArgs e) { try { // OK -> 数据提交 int iCount = this.listView1.SelectedIndices.Count; if (iCount != 1) { MessageBox.Show("Value is empty"); return; } // 新增:通过选中索引从自定义数据源取对应值 int selectedIndex = this.listView1.SelectedIndices[0]; SelectedItemValue = myData[selectedIndex]; // 这里可以直接写你要保存到其他位置的逻辑,比如赋值给其他变量、控件等 // 示例:targetTextBox.Text = SelectedItemValue; DialogResult = DialogResult.OK; Close(); } catch (Exception ex) { //WriteProtokoll(ex.ToString(), 0); Close(); } }
2. 跨窗体取值示例(如果需要在打开该窗体的父窗体中拿值)
using (var listSelectForm = new YourListViewForm()) { if(listSelectForm.ShowDialog() == DialogResult.OK) { // 直接获取选中的值 var targetValue = listSelectForm.SelectedItemValue; // 后续业务处理逻辑 } }
注意事项
- 请确保
myData是窗体类的全局字段,不要定义为局部变量,否则OK按钮事件中无法访问 - 虚拟模式下所有和数据相关的操作都优先操作你自己维护的数据源,不要依赖ListView控件本身的Item集合获取全量数据
内容的提问来源于stack exchange,提问作者liberty
相关产品推荐
相关产品推荐

