-
问题内容:参与贴子“怎么知道鼠标在控件上面刚停下?”的同志及关注者快进来,有好消息!
- 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=5196217
- 所属论坛:C#
审核组:.NET技术
- 提问者:hbxtlhx
解决者:hbxtlhx
- 感谢:xiaoku buyaowen lizhizhe2000 wdy9927 raozhiven flyforlove Accelerator flyforlove Eddie005 liujia_0421 liujia_0421 raozhiven JSIFENG cangwu_lee yuzhlhua cancerser flyforlove Influence tjvictor ycqing kyle315 raozhiven dyw31415926 pyuan zerg318 zerohk colaxu kook_tian GXY2005 GXY2005 raozhiven raozhiven flyforlove Tenner junsir GXY2005 liuchao305 raozhiven raozhiven wangkun9999 GXY2005 bjgzxx flyforlove mfjustlove flyforlove southsky8019 GXY2005 flyforlove jrl5365 GXY2005 Qim flyforlove tete gui06
- 关键字:调用 控件 .NET技术 窗体 C# using public 鼠标 flag 恭喜 trackmouseevent 悬停
- 答案:
我的贴子“怎么知道鼠标在控件上面刚停下?”里问了一个问题,可是觉得大家的处理不太理想,我好好查了一下Control的用法,终于得到了一个较好的处理方法。原贴地址:
http://community.csdn.net/Expert/topic/5193/5193513.xml?temp=.569195
我的处理是这样的:
重写控件的MouseHover及MouseMove两个基类的方法,如下:
protected override void OnMouseHover(EventArgs e)
{
System.Console.WriteLine(DateTime.Now);
base.OnMouseHover(e);
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
base.ResetMouseEventArgs();
}
注释:
把上面的代码放入到自己的代码里(如果是窗体里则直接放,如果继承的控件,就放到控件的代码里)
编译程序及运行后,大家就会看到每当鼠标停下来的时候都会引发一次MouseHover事件而会在输出窗口里输出当前时间的字符串,真在太高兴了。
因为这也是个技术问题,只不过自己解决了,特来感谢原贴参与者并放分一次。
------------
好希望能把这个加入FAQ!
---------------------------------------------------------------
hehe ...
lz好人
---------------------------------------------------------------
收藏
谢谢lz
---------------------------------------------------------------
来了,恭喜楼主
---------------------------------------------------------------
学习~恭喜~接分~
---------------------------------------------------------------
呵呵,原来样这处理就可以了?
---------------------------------------------------------------
等我研究一下ResetMouseEventArgs()
---------------------------------------------------------------
感动ing~~~~~
---------------------------------------------------------------
我看了一下源码,这个方法最终调用的本地方法_TrackMouseEvent
但是它的flag设置为dwFlags = 3
也就是说dwFlags = TME_HOVER + TME_LEAVE
应该是把悬停和离开的事件都重置了,
我的建议是自己调用_TrackMouseEvent方法只重置TME_HOVER,稍后给出源码。
---------------------------------------------------------------
@_@
---------------------------------------------------------------
强人,学习了..
---------------------------------------------------------------
收藏一下..
---------------------------------------------------------------
虽然可以实现,但闪得历害,不是我想要的效果
我在 OnMouseHover 中显示 ToolTip,鼠标放在那不动,几乎每秒闪了两次。
另外不明白要在 OnMouseHover 中加入 System.Console.WriteLine(DateTime.Now); 这句话是什么意思,应该无意义吧
---------------------------------------------------------------
学习~恭喜~接分~
---------------------------------------------------------------
进来了
---------------------------------------------------------------
mark
---------------------------------------------------------------
要分 也得先吃饭:)
---------------------------------------------------------------
贴出源码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
bool flag = false;
public Form1()
{
InitializeComponent();
}
private bool MyTrackMouseEvent(IntPtr handle)
{
TRACKMOUSEEVENT tme = new TRACKMOUSEEVENT();
tme.dwFlags = 1; //注意这里,这里只重置了TME_HOVER
tme.hwndTrack = handle;
return _TrackMouseEvent(tme);
}
[DllImport("comctl32.dll", ExactSpelling = true)]
private static extern bool _TrackMouseEvent(TRACKMOUSEEVENT tme);
private void button1_MouseMove(object sender, MouseEventArgs e)
{
if (flag)
{
MyTrackMouseEvent((sender as Control).Handle);
flag = !flag;
}
}
private void button1_MouseHover(object sender, EventArgs e)
{
textBox1.AppendText(DateTime.Now.ToString()+"\n");
flag = true;
}
}
[StructLayout(LayoutKind.Sequential)]
public class TRACKMOUSEEVENT
{
public int cbSize;
public int dwFlags;
public IntPtr hwndTrack;
public int dwHoverTime;
public TRACKMOUSEEVENT() {
this.cbSize = Marshal.SizeOf(typeof(TRACKMOUSEEVENT));
this.dwHoverTime = 400;
}
}
}
---------------------------------------------------------------
坚决收藏
-------------------------------------
- 评价:
给朵鲜花(3)
扔个鸡蛋(0)