Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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# 当鼠标悬停在listview项上时,工具提示闪烁_C#_Winforms_Listview_Tooltip - Fatal编程技术网

C# 当鼠标悬停在listview项上时,工具提示闪烁

C# 当鼠标悬停在listview项上时,工具提示闪烁,c#,winforms,listview,tooltip,C#,Winforms,Listview,Tooltip,我想在鼠标悬停在listview项上时显示气球工具提示。所以我写了下面的代码,但问题是当工具提示显示时,就会出现巨大的闪烁。如何阻止它。请导游。谢谢 private void treeListView1_MouseMove(object sender, MouseEventArgs e) { ListViewItem item = treeListView1.GetItemAt(e.X, e.Y); ListViewHitTest

我想在鼠标悬停在listview项上时显示气球工具提示。所以我写了下面的代码,但问题是当工具提示显示时,就会出现巨大的闪烁。如何阻止它。请导游。谢谢

 private void treeListView1_MouseMove(object sender, MouseEventArgs e)
        {
            ListViewItem item = treeListView1.GetItemAt(e.X, e.Y);
            ListViewHitTestInfo info = treeListView1.HitTest(e.X, e.Y);

            if ((item != null) && (info.SubItem != null))
            {
                toolTip1.Show(info.SubItem.Text, this.treeListView1);
            }
            else
            {
                toolTip1.Hide(this.treeListView1);
            }
        }

记住最后一个鼠标位置并仅在位置更改时重新显示工具提示非常有用。否则,将在事件发生时永久显示工具提示。例如:

private Point LastMousePos = new Point(-1, -1);

private void treeListView1_MouseMove(object sender, MouseEventArgs e)
{
    if (LastMousePos == e.Location)
        return;

    ListViewItem item = treeListView1.GetItemAt(e.X, e.Y);
    ListViewHitTestInfo info = treeListView1.HitTest(e.X, e.Y);

    if ((item != null) && (info.SubItem != null))
    {
        LastMousePos = e.Location;
        toolTip1.Show(info.SubItem.Text, this.treeListView1);
    }
    else
    {
        toolTip1.Hide(this.treeListView1);
    }
}

可能不会有多大帮助,因为我非常确定MouseMove不会背对背调用相同的点(因为在这种情况下,鼠标实际上不会移动)。不过,您的思路是正确的,您可能需要记住最后一个
ListViewItem
和/或子项。一般来说,我同意,但如果我没有记错,那么对于同一鼠标位置,鼠标移动事件实际上会被多次调用。但我可能错了。不过,您对最后一个
ListViewItem
的建议当然要好得多。但是您应该在类似
MouseLeave
Leave
事件中重置最后一项。否则,离开并重新输入项目后,工具提示将不会重新出现。是。每次鼠标移动中显示工具提示时,都会再次触发相同的x、y。如果再次显示工具提示,则将有一个持续不断的mousemove事件循环,且具有相同的(x,y)。不确定为什么会出现这种情况,但如果x、y重复,则退出事件可防止重新触发,循环停止。