http://bbs.hidotnet.com/ShowPost.aspx?PostID=2617

解决方案 »

  1.   

    俺写了一段代码,你参考下:private void Form1_MouseEnter(object sender, System.EventArgs e)
    {
    this.TopMost = true;
    if (this.Width != 500)
    {
    this.Width = 500;
    }
    }private void Form1_MouseLeave(object sender, System.EventArgs e)
    {
    Rectangle ret = new Rectangle(this.Left+5, this.Top+5, this.Width-10, this.Height-10);
    //System.Console.Write(ret);
    //System.Console.Write(Cursor.Position.ToString());
    //System.Console.WriteLine(!ret.Contains(Cursor.Position));
    if ( !ret.Contains(Cursor.Position))
    {
    this.Width =120;
    }
    }
      

  2.   

    因为在程序里只用Form1_MouseLeave的时候会出现不太理想的情况:当鼠标不是离开窗体而是只在移到其它的控件的上面的时候也会发生Form1_MouseLeave而使窗体变化大小,所以我加了一个对鼠标当前位置的检测,如果当前的鼠标位置真的离开了窗体才使窗体发生变化,如果鼠标还在窗体内则不会变化窗体,效果我觉得还是可以的.
      

  3.   

    protected override void WndProc(ref Message m)
    {
    // 判断窗口消息(m.Msg) 然后加入自己的处理就行了
    base.WndProc (ref m); // 基类调用
    }
      

  4.   

    谢谢各位!不知道大家有没有遇到过:
    我在FORM上布置满了PANEL和图片之类的,FROM就不能触发MOUSEENTER和MOUSELEAVE事件了,只能对上面的控件触发,怎么办呢?
      

  5.   

    FORM上布置满了PANEL和图片之类的控件后确实是没有了MouseEnter和MouseLeave之类的事件了.不知道窗体(Form)有没有一个像KeyPreview这样的一个对鼠标的事件的处理.
    等待高人,帮你顶一下.