类似VM菜单的简单实现 (二)
来源:互联网 发布:淘宝服装街拍 编辑:程序博客网 时间:2024/06/13 01:32
上文的实现方式是通过Panel的 MouseHover 与 MouseLeave事件绑定来实现鼠标 类似VM菜单的效果的。
但是这样实现有个缺点,就是如果Panel上面有控件,比如Button,当鼠标移到Button上时,那么就要响应Panel
的MouseLeave事件。。。
解决方法有两种,
1.通过重写鼠标绑定事件,将Panel及其上面所有的Control都添加同一个MouseHover和MouseLeave事件。这样实现是在是太麻烦了。否决。。。
2.通过一个Timer,不停地读取鼠标位置,判断是否在Panel上。。。这样会对效率有影响,不过效果还是差强人意。
代码如下:
//Panel上放了一个按钮 Button1
#region 鼠标控制标题栏显隐
//鼠标进入
private bool mEntered = false;
void timer1_Tick(object sender, EventArgs e)
{
Point pos2 = this.PointToClient(Cursor.Position);
Point pos = panel1.PointToClient(Cursor.Position);
bool entered = this.panel1.ClientRectangle.Contains(pos);
if (entered != mEntered)
{
mEntered = entered;
if (!entered)
{
//鼠标离开
Animation(false);
}
else
{
//鼠标悬停
if (!ismoving)
if (this.panel1.Location.Y <= 10 - this.panel1.Height)
Animation(true);
}
}
}
bool updown = true;
int adddistance = 3;
bool ismoving = false;
System.Windows.Forms.Timer timer = new Timer();
private void Form2_Load(object sender, EventArgs e)
{ //
panel1.Margin = new System.Windows.Forms.Padding(0, 0, 0, 0);
panel1.Location = new Point(panel1.Location.X, 10 - panel1.Height);
}
private void Animation(bool isdown)
{
updown = isdown;
if (isanimation)
{
ismoving = true;
timer = new Timer();
timer.Interval = 50;
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
}
void timer_Tick(object sender, EventArgs e)
{
if (updown)//show
if (this.panel1.Location.Y < 0)
{
this.panel1.Location = new Point(this.panel1.Location.X,
Math.Min(0, this.panel1.Location.Y + adddistance));
}
else
{
//
ismoving = false;
timer.Dispose();
}
else//hide
{
if (this.panel1.Location.Y > 10 - panel1.Height)
this.panel1.Location = new Point(this.panel1.Location.X,
Math.Max(10 - panel1.Height, this.panel1.Location.Y - adddistance));
else
{
ismoving = false;
timer.Dispose();
}
}
}
bool isanimation = true;
private void button1_Click(object sender, EventArgs e)
{
isanimation = !isanimation;
}
#endregion
- 类似VM菜单的简单实现 (二)
- 类似VM菜单的简单实现
- 实现类似UC浏览器的菜单
- 类似优酷的圆盘菜单实现
- 二、三级联动菜单,简单实现(2)
- 下拉菜单的实现(二)
- 类似QQ贴边掩藏功能的实现(二)
- 自己动手,实现一种类似List<T>的数据结构(二)
- Redis实现类似同步方法调用的功能(二)
- 自己实现的简单MVC框架(类似Struts2+Spring)
- 简单计时器的实现方法(类似秒表)
- android简单实例--------普通菜单optionMenu,上下文菜单ContextMenu,弹出式菜单的使用PopuMenu(二)
- 类似Google Calendar效果的简单实现
- python实现类似awk的简单功能
- 简单实现toolTips类似的提示功能
- 类似qq等重抽屉菜单的实现。
- JQuery实现类似QQ下拉菜单式的效果
- jQuery实现类似QQ下拉菜单式的效果
- sql中的零碎知识点
- 【模板】 简单数论
- xml学习体会
- nsis安装包(五)_手把手教NIS Edit安装向导的使用
- POJ 1990 MooFest(树状数组)
- 类似VM菜单的简单实现 (二)
- 深究递归和迭代的区别、联系、优缺点及实例对比
- android---applybatch
- 【产品&运营】如何做好用户运营
- android 调用系统界面
- 嵌入式经典面试题-嵌入式程序员必须知道的0x10个基础问题
- 多任务和多线程(2)
- linux ps 命令大全
- sqlite3 的使用