Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ListViewHitTestInfo.Item.SubItems.IndexOf给出了错误的值_C#_.net_Winforms - Fatal编程技术网

C# ListViewHitTestInfo.Item.SubItems.IndexOf给出了错误的值

C# ListViewHitTestInfo.Item.SubItems.IndexOf给出了错误的值,c#,.net,winforms,C#,.net,Winforms,我有一个Listview,当用户双击最后一列(index=7)时,我想在其中做出反应 我正在使用以下代码: Point mousePos = this.lvInfo.PointToClient(Control.MousePosition); ListViewHitTestInfo hitTest = this.lvInfo.HitTest(mousePos); int columnIndex = hitTest.Item.SubItems.IndexOf(hitTest.SubItem); if

我有一个Listview,当用户双击最后一列(index=7)时,我想在其中做出反应

我正在使用以下代码:

Point mousePos = this.lvInfo.PointToClient(Control.MousePosition);
ListViewHitTestInfo hitTest = this.lvInfo.HitTest(mousePos);
int columnIndex = hitTest.Item.SubItems.IndexOf(hitTest.SubItem);
if (columnIndex == 7)
    MessageBox.Show("Test!");
我得到了错误的columnIndex值,不知道为什么。
即使我总是单击同一列,值似乎也会发生变化。

我尝试了这种不同的方法,效果很好

private void lvInfo_MouseUp(object sender, MouseEventArgs e)
{
    this.X = e.X;
    this.Y = e.Y;
}

private void lvInfo_DoubleClick(object sender, EventArgs e)
{
    // if double clicked on gas column open dialog for entering new gas value
    Point mousePos = new Point(this.X,this.Y);
    ListViewHitTestInfo info = lvInfo.HitTest(mousePos);
    int colNr = info.Item.SubItems.IndexOf(info.SubItem);
    if (colNr == 7)
    {
        MessageBox.Show("Test");

    }
}

我也在(单次)点击事件中尝试了这一点。同样的问题。我已经试过你的代码了,它工作得很好,我总是得到正确的列索引。我从默认更改的ListView的唯一属性是View改为Details,FullRowSelect改为True,否则我无法单击其他列。您的ListView上是否有任何其他非默认属性?非默认属性会影响这一点。但我找到了一个解决方案(见我的答案)(multiselect=false,Headerstyle=non-clickable)。但我使用的是ListView的自定义扩展,它支持双缓冲并过滤掉WM_ERASEBKGND消息,以减少闪烁。也许这会引起问题?恐怕我不知道。如果你很好奇,那么暂时将扩展注释掉,看看它是否有效。很高兴你找到了解决办法。您应该将您的答案标记为已接受。PointToClient方法似乎不适用于我的。已编辑的我的答案。这现在适用于X和Y位置。别问我为什么。你抢先一步,我正要发布基于X/Y值的代码。我总是慢了一分钟。不管怎样,Congat正在努力让它工作!:-)