首页 > 解决方案 > 双击 ListView 的一行时选择了哪一列

问题描述

首先,我不是在谈论单击列标题。我说的是选定行中的项目。
我有一个 ListView 并想双击username选定行中的列并将用户名复制到剪贴板。
如果我双击password所选行的列,请将密码复制到剪贴板。

显然我们可以知道选择了哪一行,但我不知道如何捕获在该行中双击了哪一列。
那可能吗?

人们想要代码,所以你去吧,记住只能选择单行,所以是的,0 会起作用:

ListViewItem lvi = this.contentListView.SelectedItems[0];
string pass = lvi.SubItems[5].Text;

标签: c#.netwinformslistview

解决方案


您可以使用 ListView HitTest方法。它返回一个ListViewHitTestInfo对象。
它的SubItem属性为您提供ListViewSubItem单击的对象:

ColumnHeader可以使用ListViewItem.SubItems.IndexOf()方法识别相应的对象。ListViewItem和都SubItemListViewHitTestInfo对象中被引用。

private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
    var hitInfo = listView1.HitTest(e.Location);
    if (hitInfo.SubItem == null || string.IsNullOrEmpty(hitInfo.SubItem.Text)) return;

    int subItemIndex = hitInfo.Item.SubItems.IndexOf(hitInfo.SubItem);
    var column = listView1.Columns[subItemIndex];

    // Do whatever you need to do with the SubItem text
    string result = ProcessSubItemText(hitInfo.SubItem.Text, column);
    Clipboard.SetText(result, TextDataFormat.UnicodeText);
}

推荐阅读