我的一个Form要实现这样的功能,当鼠标进入时,将其透明度修改为1,将鼠标离开后其透明度变为0.5,于是我重载了Form的OnMouseEnter事件和OnMouseLeave事件,但是我后来发现:当鼠标移到这个Form上的子控件时,会触发OnMouseLeave事件,当鼠标从其子控件上移到Form上时,会触发OnMouseEnter事件。请问有没有方法可以避免呢

解决方案 »

  1.   

    在onmousemove事件中判断e.x和e.y,超出form的边界,透明度变为0.5,反之为1
      

  2.   

    试了下,可以实现你说的功能
    你再检查检查代码,确认下是Form的事件
      

  3.   

    试试这个,有点投机,你看着用吧 :)
            private void Form1_MouseLeave(object sender, EventArgs e)
            {
                Rectangle bounds = this.RectangleToScreen(this.ClientRectangle);
                if (!bounds.Contains(Cursor.Position))
                {
                    this.Opacity = 0.5;
                }
            }
      

  4.   


    但是当鼠标位于这个Form的子控件上时,是无法引发onmousemove事件的
      

  5.   

    OnMouseEnter事件和OnMouseLeave事件本来就是进入和离开的时候触发的事件吧,应该要用其他方法实现。
      

  6.   

    但是对于这个Form 的子控件有没有办法进行控制呢
      

  7.   

    鼠标移出Form的时候,也就无法判断是否在bound中了,所以bounds.Contains(Cursor.Position)的结果一直为真
      

  8.   

    MouseLeave中写上这些代码:
    if (Cursor.Position.X > this.Location.X && Cursor.Position.Y > this.Location.Y && Cursor.Position.X < this.Location.X + this.Width && Cursor.Position.Y < this.Location.Y + this.Height)
                    this.Opacity = 1;
                else
                    this.Opacity = 0.5;