当前位置:编程学习 > C#/ASP.NET >>

关于鼠标移入移出控件效果


请教下,如何用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 隐藏 显示 --------------------编程问答-------------------- 贴你代码出来啊 --------------------编程问答-------------------- mouseenter并显示透明panel后,置一个标记,表示已经显示了panel,这样在鼠标动作时就不用频繁的控制控件的显示和隐藏了 --------------------编程问答-------------------- 鼠标移出 panelA 的时候增加判断条件:鼠标不在 panelA 的坐标范围
鼠标移入 panelA 的时候增加判断条件:panelB 未显示 --------------------编程问答-------------------- mouseenter事件中显示透明的panel
mouseleave事件中隐藏透明的panel

当鼠标进入panelA的时候,显示panelB,当鼠标移动到panelB上的时候,并没有移动出panelA的边界,那么panelB不会隐藏。 --------------------编程问答-------------------- 嗯,在两个panel间移动时加个判断就好,我写过类似的东西,只有第一次动态加载panel b的时候闪了下。 --------------------编程问答--------------------
引用 1 楼 hwenycocodq520 的回复:
贴你代码出来啊


其中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;
                }
            }
        } --------------------编程问答--------------------
引用 5 楼 wangjcltj 的回复:
嗯,在两个panel间移动时加个判断就好,我写过类似的东西,只有第一次动态加载panel b的时候闪了下。

请指点一二,多谢!我写的代码上面已经贴出来了,请帮忙修改下。 --------------------编程问答--------------------
引用 7 楼 unwatched 的回复:
Quote: 引用 5 楼 wangjcltj 的回复:

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

请指点一二,多谢!我写的代码上面已经贴出来了,请帮忙修改下。


pnlVideo_MouseLeave事件里面应该是检测此鼠标是不是在pnlEdit里面吧,你那个检测算法有点没看懂
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,