想实现Windows窗体下的一个效果

赤色火焰 2008-03-25 10:19:25
我想实现这样一个效果:
窗体的左边有一个按钮,当鼠标移到按钮上时,渐渐出来一个面板(像Panel),这个效果有点像VS2005中工具箱的窗体一样(QQ好像也是这样的),当鼠标移到工具箱上时工具面板就显示出来了.


而我现在能实现的就是:
我能让鼠标移到按钮上从左至右渐渐的显示出Panel,但是它不会停

我的思路是:
在按钮(按钮在窗体的最左边)的OnMouseEnter事件中让定时器启动,然后让Panel显示出来(这时是看不见的,它在窗体最左边),在Timer的Tick事件中我让Panel显示出来后就停止Timer的运行,但是只要鼠标不离来按钮Panel就循环从左至右逐渐显示,不会停止.

错误我也找到了:
就是当鼠标一直在按钮上时它会一下触发OnMouseEnter事件,而在Tick事件中让Timer停止后Timer会再次启动,这就是为什么Panel一直循环显示不会停止了.

还请各位高手朋友提供一个思路,能给出代码更好,小弟在此谢谢了.
...全文
119 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
csharp_start 2008-03-25
  • 打赏
  • 举报
回复
使用完后要记得 b=true
http://blog.csdn.net/csharp_start/archive/2007/12/14/1936524.aspx
wxg22526451 2008-03-25
  • 打赏
  • 举报
回复
可以多设个变量,
标志面板是否已经显示,
然后根据变量控制Timer的启动/停止
赤色火焰 2008-03-25
  • 打赏
  • 举报
回复
我用了一个bool型的变量b初始为false,而在Tick中当判断面板出来是就让b=true,在OnMouseEnter中是这样写的
private void OnMouseEnter(object sender,EventArgs e)
{
if(b==false)
{
//启动定时器
}
}
可还是不行
linhl 2008-03-25
  • 打赏
  • 举报
回复
在OnMouseEnter事件里加个判断,如果面板已经显示就不再启动Timer
赤色火焰 2008-03-25
  • 打赏
  • 举报
回复
谢谢各位
linhl 2008-03-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xukuilove 的回复:]
我用了一个bool型的变量b初始为false,而在Tick中当判断面板出来是就让b=true,在OnMouseEnter中是这样写的
private void OnMouseEnter(object sender,EventArgs e)
{
if(b==false)
{
//启动定时器
}
}
可还是不行
[/Quote]

估计在Tick中的判断有问题,b没有被赋值为true,单步调试一下

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧