微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 控件中的多个MouseHover事件

我正在尝试在C#中实现自定义控件,我需要在鼠标悬停时获取事件.我知道有MouseHover事件,但它只触发一次.要让它再次触发,我需要使用控件的鼠标并再次输入.

有什么方法可以做到这一点吗?

解决方法

让我们将“停止移动”定义为“保持在n ms的x像素半径内”.

订阅MouseMove事件并使用计时器(设置为n ms)来设置超时.每次鼠标移动时,请检查公差.如果超出容差范围,请重置计时器并记录新的原点.

代码

Point lastPoint;
const float tolerance = 5.0;

//you might want to replace this with event subscribe/unsubscribe instead
bool listening = false;

void OnMouSEOver()
{
    lastpoint = Mouse.Location;
    timer.Start();
    listening = true; //listen to MouseMove events
}

void OnMouseLeave()
{
    timer.Stop();
    listening = false; //stop listening
}

void OnMouseMove()
{
    if(listening)
    {
        if(Math.abs(Mouse.Location - lastPoint) > tolerance)
        {
            //mouse moved beyond tolerance - reset timer
            timer.Reset();
            lastPoint = Mouse.Location;
        }
    }
}

void timer_Tick(object sender,EventArgs e)
{
    //mouse "stopped moving"
}

原文地址:https://www.jb51.cc/csharp/98057.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐