You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:36:03