社区
C#
帖子详情
怎么知道鼠标在控件上面刚停下?
北京的雾霾天
2006-11-29 11:40:40
大家可能都知道MouseHover这个事件是鼠标在控件上面刚停下了一段时间后发生的,可是当鼠标在控件内再移动后停下就不会发生了,除非鼠标离开控件再进入控件停下后再发生。我现在想知道在鼠标不离开控件的时候只要鼠标停下就调用我的一个方法而在移动的时候不调用,怎么做?
...全文
847
51
打赏
收藏
怎么知道鼠标在控件上面刚停下?
大家可能都知道MouseHover这个事件是鼠标在控件上面刚停下了一段时间后发生的,可是当鼠标在控件内再移动后停下就不会发生了,除非鼠标离开控件再进入控件停下后再发生。我现在想知道在鼠标不离开控件的时候只要鼠标停下就调用我的一个方法而在移动的时候不调用,怎么做?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
51 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
北京的雾霾天
2006-11-30
打赏
举报
回复
请查看这个贴子:
http://community.csdn.net/Expert/topic/5196/5196217.xml?temp=.1034815
北京的雾霾天
2006-11-30
打赏
举报
回复
但是感觉MouseHover事件实在诡秘,不知道怎么个算法才能做的更好更像。
GXY2005
2006-11-30
打赏
举报
回复
问题出在我第一次测试MouseMove事件是鼠标在控件内不动也连续触发,后来又不是了.??
只有移动才触发MouseMove事件就麻烦了,可能依靠MouseMove事件不能判断出鼠标停止
由于Windows 是消息事件机制,没有一个鼠标停止消息,还有就是鼠标停止当然没有动作也就没有事件.
我下面这个是大部分情况正确
int x=0,y=0,x1=0,y1=0;
private void textBox2_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if((Math.Abs(x-e.X)<=2)&&(Math.Abs(y-e.Y)<=2))
{
label2.Text="鼠标停止!";x1++;
}
else
{
label2.Text="鼠标移动中....";y1++;
}
x=e.X;y=e.Y;
}
大家可以测试下,x1和y1都是增加的,说明了状态的改变!当然只是一般情况下正确
灰太狼
2006-11-29
打赏
举报
回复
sorry說錯了,是MouseEnter和MouseMove相結合,在mouseEnter中放time定時器,在mouseMove中重置定時器。這樣可以不?
北京的雾霾天
2006-11-29
打赏
举报
回复
用Timer的就不必了,我觉得这不是个好方法。
jcyluck
2006-11-29
打赏
举报
回复
1.判断MouseMove事件退出
2.当鼠标进入控件后就不断获取光标位置,当前0.1秒的point与现在point相等时就是停止移动了
jydqwe
2006-11-29
打赏
举报
回复
时间间隔可以你自己设置 把计时器的间隔时间设短就可以达到你的效果。
jydqwe
2006-11-29
打赏
举报
回复
这个问题我刚解决 是利用一个计时器
具体这样。
private void timerHover_Tick(object sender, EventArgs e)
{
//记录现在的鼠标点
System.Drawing.Point nowPoint = DMapControl.PointToClient(MousePosition);
//如果现在时间-最后移动时间>计时器时间
if (lastMousePoint.X == nowPoint.X && lastMousePoint.Y == nowPoint.Y && DateTime.Now.Ticks - lastMouseMoveTime >= timerHover.Interval * 10000)
{
这里的LASTMOUSEPOINT和LASTMOUSEMOVETIME 都是在MOVE事件里不停的记录的
意思就是 如果 计时器的间隔时间(也就是你想设定的悬停时间) 内 鼠标没有移动的话
就是你想要的悬停事件了
非专业开发Five
2006-11-29
打赏
举报
回复
MouseMove和判断相结合,然后加上动态读取控件位置………………然后……确实很费事阿
不过也使完全可以实现,不用多想的办法
我笨…………
北京的雾霾天
2006-11-29
打赏
举报
回复
MouseEnter不合题意。
我是说只在控件内移动停下后。只在控件内!
WeiWY
2006-11-29
打赏
举报
回复
MouseEnter可以不
北京的雾霾天
2006-11-29
打赏
举报
回复
怎么个结合法?
灰太狼
2006-11-29
打赏
举报
回复
MouseHover和MouseMove相結合,可以不?
北京的雾霾天
2006-11-29
打赏
举报
回复
我只是不想用Timer来实现,但是又想不到更好的方法,就当是散分的贴。但是如果大家提供的方法可以我是多给分的。
syfsz
2006-11-29
打赏
举报
回复
晕,回的是 GXY2005(晓晨美眉好^_^) 的,居然这么多人插队了
mqmmx
2006-11-29
打赏
举报
回复
学习,不知 "为情飞"的代码哪里没有满足楼主的要求
syfsz
2006-11-29
打赏
举报
回复
楼上的好像不行, 你鼠标移动怎么能得到鼠标停止的事件触发动作呢?其实你是两次移动在同一点上,表现出来 “鼠标停止!”。
如 你鼠标/连续/移动到 a 点突然停止 这个时候记录了 a 的x y 值,并停止不动,那label 显示的将是“鼠标移动中....";这个时候轻动一下鼠标就停止,会显示出 “鼠标停止!”。
应该不符合搂主的要求。
jydqwe
2006-11-29
打赏
举报
回复
其实每次TIMER触发的时候就是做了一个判断。
jydqwe
2006-11-29
打赏
举报
回复
计时器开关我是这样设置 不知道是否妥当。。
MOUSEMOVE 计时器开启 时间
if (lastMousePoint.X != e.X || lastMousePoint.Y != e.Y)
{
lastMousePoint.X = e.X;
lastMousePoint.Y = e.Y;
lastMouseMoveTime = DateTime.Now.Ticks;
timerHover.Enabled = true;
}
计时器TICK事件
//如果现在时间-最后移动时间>计时器时间
if (lastMousePoint.X == nowPoint.X && lastMousePoint.Y == nowPoint.Y && DateTime.Now.Ticks - lastMouseMoveTime >= timerHover.Interval * 10000)
{
timerHover.Enabled = false;
}
jydqwe
2006-11-29
打赏
举报
回复
GXY2005(晓晨美眉好^_^)
你那方法我试过 但是因为MOUSEMOVE事件是连续出发 所以你那个方法会连续赋值 导致相等
x=e.X;y=e.Y;代码可能不能放在判断的外面
同时 我的计时器功能就是为了实现控制悬停时间的功能 可能和楼主的要求有点出入?
不过在资源开销方面 并不是非常的大 可能因为我悬停时间设置为1秒的关系
加载更多回复(31)
让C#在窗口上显示
鼠标
悬停提示信息
C#
鼠标
悬停提示效果,让C#程序窗口中显示一个
鼠标
悬停状态的提示信息,类似 WEB中的Alt和Title标签,便于用户对窗口中文字有一个更...源码在VS2010下可编译,测试效果请参阅软件截图。 运行环境:Visual Studio2010
chart游标跟随并悬停显示ToolTip
chart游标跟随并悬停显示ToolTip
WinForm 判断
鼠标
是否在
控件
上
WinForm 判断
鼠标
是否在
控件
上
c#
鼠标
在
控件
上面
,然后显示文字
先添加toolTip
控件
到界面 然后每个
控件
的属性会多一项 ToolTip 第一种:直接给里面加文字 第二种: private void pictureBox_topmost_MouseHover(object sender, EventArgs e) { if (this.TopMost == true)...
WinForm实现
鼠标
悬停显示
控件
WinForm实现
鼠标
悬停显示
控件
在某些需频繁操作的环节中,为提高效率、减少劳动,可以在操作细节上下功夫,以带来更好的用户体验。 今天介绍的
鼠标
悬停显示功能就是一例,看似仅仅节省了一次点击,实则在繁复...
C#
110,567
社区成员
642,567
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章