请教下,如何用winform做出效果如团购网站,鼠标移入一个控件(如panel A),则在panel A上透明显示另外一个panel B,而且透明显示的panel B上还有其它控件可以操作,鼠标移出panel A区域则隐藏panel B。
本人使用了鼠标事件去控制,但是一直存在不断闪动的问题(知道问题出在鼠标在panelA与panelB之间不停切换),查了不少资料,还是未能解决。请教高手!注:panel A 和panel B的位置如图一样,panel B 在panel A的 Button位置鼠标控件winform隐藏显示

解决方案 »

  1.   

    mouseenter并显示透明panel后,置一个标记,表示已经显示了panel,这样在鼠标动作时就不用频繁的控制控件的显示和隐藏了
      

  2.   

    鼠标移出 panelA 的时候增加判断条件:鼠标不在 panelA 的坐标范围
    鼠标移入 panelA 的时候增加判断条件:panelB 未显示
      

  3.   

    mouseenter事件中显示透明的panel
    mouseleave事件中隐藏透明的panel当鼠标进入panelA的时候,显示panelB,当鼠标移动到panelB上的时候,并没有移动出panelA的边界,那么panelB不会隐藏。
      

  4.   

    嗯,在两个panel间移动时加个判断就好,我写过类似的东西,只有第一次动态加载panel b的时候闪了下。
      

  5.   


    其中pnlVideo为panelA,pnlEdit为panelB,有一点需要补充的是前面有说过,panelB上还有按钮控件,所以移动鼠标到各个按钮上时,切换过程中就会对应闪动一次 private void pnlVideo_MouseMove(object sender, MouseEventArgs e)
            {
                Point curToClientPoint = this.PointToClient(MousePosition);            if (this.Width > curToClientPoint.Y)
                {
                    pnlEdit.Visible = true;
                }
                else
                {
                    pnlEdit.Visible = false;
                }
            }        private void pnlVideo_MouseLeave(object sender, EventArgs e)
            {
                if (pnlEdit.Visible)
                {
                    Point curToClientPoint = this.PointToClient(MousePosition);                if (this.Width < curToClientPoint.X || curToClientPoint.X <= 0 || this.Height < curToClientPoint.Y || curToClientPoint.Y <= 0)
                    {
                        pnlEdit.Visible = false;
                    }
                }
            }
      

  6.   

    请指点一二,多谢!我写的代码上面已经贴出来了,请帮忙修改下。pnlVideo_MouseLeave事件里面应该是检测此鼠标是不是在pnlEdit里面吧,你那个检测算法有点没看懂