Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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# 如何捕捉鼠标在控件上按住的事件?_C# - Fatal编程技术网

C# 如何捕捉鼠标在控件上按住的事件?

C# 如何捕捉鼠标在控件上按住的事件?,c#,C#,我想捕捉用户在C#中单击并按住控件的事件 我读过MSDN,我只看到鼠标按下,鼠标向上。。。但是没有Move-Hold事件。您需要使用带有计时器的mentinoed事件 例如: 穆斯敦 启动计时器 鼠标 禁用计时器 如果用户持有的时间超过计时器时间-调用事件处理程序,当鼠标移动速度快于计时器运行速度时-禁用运行的计时器。首先,您应该使用秒表来检测所需的时间 using System.Diagnostics; 其次,定义stopwatch类的全局实例 Stopwatch s = new

我想捕捉用户在C#中单击并按住控件的事件


我读过MSDN,我只看到鼠标按下,鼠标向上。。。但是没有Move-Hold事件。

您需要使用带有计时器的mentinoed事件

例如:

  • 穆斯敦
    • 启动计时器
  • 鼠标
    • 禁用计时器

如果用户持有的时间超过计时器时间-调用事件处理程序,当鼠标移动速度快于计时器运行速度时-禁用运行的计时器。

首先,您应该使用秒表来检测所需的时间

using System.Diagnostics;
其次,定义stopwatch类的全局实例

Stopwatch s = new Stopwatch();
这是您应该使用的第一个事件:

private void controlName_MouseDown(object sender, MouseEventArgs e)
{
    s.Start();
}
private void controlName_MouseUp(object sender, MouseEventArgs e)
{
    s.Stop();
    //determine time you want . but take attention it's in millisecond
    if (s.ElapsedMilliseconds <= 700 && s.ElapsedMilliseconds >= 200)
    {
        //you code here.
    }           
    s.Reset();           
}
这是您应该使用的第二个事件:

private void controlName_MouseDown(object sender, MouseEventArgs e)
{
    s.Start();
}
private void controlName_MouseUp(object sender, MouseEventArgs e)
{
    s.Stop();
    //determine time you want . but take attention it's in millisecond
    if (s.ElapsedMilliseconds <= 700 && s.ElapsedMilliseconds >= 200)
    {
        //you code here.
    }           
    s.Reset();           
}
private void controlName\u MouseUp(对象发送方,MouseEventArgs e)
{
s、 停止();
//确定你想要的时间,但要注意它是以毫秒为单位的
如果(s.ElapsedMilliseconds=200)
{
//你在这里编码。
}           
s、 重置();
}

谢谢,使用计时器没问题。^我不明白,请解释一下好吗?您需要创建
timer
对象并订阅答案中提到的事件。当
MouseDown
事件触发时-您需要启动计时器,当
MouseUp
触发且计时器仍在运行时-执行操作,否则-释放计时器。此解决方案对创建鼠标保持事件没有任何好处。如果用户按住鼠标一段时间,但只有在释放鼠标后,这才有效。那就太晚了。如果用户按住鼠标一小时会怎么样?什么也没发生。这是一个糟糕的用户体验。这取决于你到底想做什么。。如果不想确定某个特定时间,可以更改if语句或将其删除。。