栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

父控件鼠标输入/离开带有子控件的事件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

父控件鼠标输入/离开带有子控件的事件

经过更多研究,我发现了Application.AddMessageFilter方法。使用此工具,我创建了.NET版本的鼠标钩:

class MouseMessageFilter : IMessageFilter, IDisposable{    public MouseMessageFilter()    {    }    public void Dispose()    {        StopFiltering();    }    #region IMessageFilter Members    public bool PreFilterMessage(ref Message m)    {         // Call the appropriate event         return false;    }    #endregion    #region Events    public class CancelMouseEventArgs : MouseEventArgs    {...}    public delegate void CancelMouseEventHandler(object source, CancelMouseEventArgs e);    public event CancelMouseEventHandler MouseMove;    public event CancelMouseEventHandler MouseDown;    public event CancelMouseEventHandler MouseUp;    public void StartFiltering()    {        StopFiltering();        Application.AddMessageFilter(this);    }    public void StopFiltering()    {        Application.RemoveMessageFilter(this);    }}

然后,我可以在容器控件中处理MouseMove事件,检查鼠标是否在父控件中,然后开始工作。(我还必须跟踪上一次鼠标移到父控件上,以便可以停止先前启动的父控件。)

-—编辑----

在表单类中,我创建并连接了过滤器:

public class MyForm : Form{   MouseMessageFilter msgFilter;   public MyForm()   {...       msgFilter = new MouseMessageFilter();       msgFilter.MouseDown += new MouseMessageFilter.CancelMouseEventHandler(msgFilter_MouseDown);       msgFilter.MouseMove += new MouseMessageFilter.CancelMouseEventHandler(msgFilter_MouseMove);    }    private void msgFilter_MouseMove(object source, MouseMessageFilter.CancelMouseEventArgs e)    {        if (CheckSomething(e.Control) e.Cancel = true;    }   }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/442690.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号