程序的界面上面有许多个Label控件,给所有这些Label注册了MouseMove和MouseLeave事件
实现的效果是,当鼠标经过或停留在Label控件上时,显示Label的边框,当鼠标指针离开Label隐藏边框。
就是只有当鼠标经过Label时,才让用户看到Label控件(控件的背景设置得和父窗体的毕竟颜色一致,这样不显示边框时就好像隐藏起来一样)
同时还注册了Label的TextChanged事件,当有内容时显示Label边框(没内容的时候我都会把Text属性设置为6个空格)很简单的效果,效果是实现了,但是在实际运行中,有时候MouseLeave事件有时候会没有触发,就是鼠标离开了Label,但是边框仍然存在。这种情况特别在鼠标移动快,在各个Label之间快速移动的时候出现的较多。只有再把鼠标指针再一次移到Label上,再移开,边框才消失。请问大家这是什么原因?以下是相关代码private void windowText_Changed(object sender, EventArgs e)
        {
            Label window = (Label)sender;
            if (window.Text == "      ")
                window.BorderStyle = BorderStyle.None;
            else
                window.BorderStyle = BorderStyle.Fixed3D;        }        private void mouseOverWindow(object sender, MouseEventArgs e)
        {
            Label window = (Label)sender;
            window.BorderStyle = BorderStyle.Fixed3D;
        }        private void mouseLeaveWindow(object sender, EventArgs e)
        {
            Label window = (Label)sender;
            if (window.Text == "      ")
                window.BorderStyle = BorderStyle.None;
        }

解决方案 »

  1.   

    就像你说的,是因为移动的太快了!还有,像这种情况你最好扩展一下Label这个控件,不要在窗体上注册事件,因为如果有很多的Label会很麻烦!不过这样效果也不会有太大改善!如果你想让效果更好的话还得多花些心思!比如,你可以在一个Label的MouseEnter事件中强行取消其他Label的边框!
      

  2.   


    谢谢你的回复
    扩展一下Label控件,具体怎么扩展,可否简单说下为什么不要在窗体上注册事件?可能是你理解错了我的意思,我是给每个Label都注册了那几个事件,不是给父窗体注册的。最后的那个建议我试一下,应该可行
      

  3.   

    Label控件必须是当前焦点控件才可以吧
      

  4.   


    如果必须具有当前焦点,那怎么解释有些可以触发有些不可以触发呢?所有的Label都没有设置焦点
      

  5.   

    这个问题最简单的处理方法就是,经过前一个label的时候记录下这个label,当你鼠标快速移动,只要碰到其他label时,就去手动清除前一个label的状态为隐藏,这样就能达到你的效果了