当你将鼠标悬停在按钮上时,有人可以帮助创建类似于Win7计算器的winform动画,目前我使用一堆图像然后在backgroundworker中循环它,但我认为它错了,这是我的代码:
当鼠标进入时会发生这种情况,
private void bgTurnOn_DoWork(object sender, DoWorkEventArgs e)
{
Label labelSender = (Label)e.Argument;
int ii = labelSender.ImageIndex;
for (int i = ii + 4; i <= 11; i++)
{
if (labelSender.AllowDrop)
{
labelSender.ImageIndex = i;
Thread.Sleep(40);
}
}
}
这是鼠标离开的时候
private void bgTurnOff_DoWork(object sender, DoWorkEventArgs e)
{
Label labelSender = (Label)e.Argument;
int ii = labelSender.ImageIndex;
for (int i = ii; i >= 0; i--)
{
if (!labelSender.AllowDrop)
{
labelSender.ImageIndex = i;
Thread.Sleep(80);
}
}
}
注意:我只使用AllowDrop,所以我不打算申报新变量,我有42个按钮,所以我认为我需要更有效的解决方案。
答案 0 :(得分:1)
您似乎想要一个发光效果,因此您可以使用下一个想法:
OpacityPictureBox : PictureBox
(级别为1-100或双0-1)。有关详细信息,请参阅this。MaxOpacity
和MinOpacity
的两个公共const int值添加到OpacityPictureBox
类,以便从外部进行简单安全的范围检查。值可能是0,100或0,1或其他值,具体取决于您对不透明度的实现。AnimatedPictureBox : UserControl
,其中包含名为PictureBox
的1 pbNormal
和名为OpacityPictureBox
的1 opbHover
,Dock = DockStyle.Fill
和一个名为{的计时器{1}}。确保timer
低于pbNormal
。opbHover
类型为Normal
的{{1}} Image
类型为pbNormal.Image
的{{1}}
类型为Hover
的Image
,其分为opbHover.Image
AnimationInterval
的构造函数中,在调用int
后,执行timer.Interval
。如果您想将光标悬停在手上,也可以AnimatedPictureBox
进行操作。InitializeComponents
类型的私人会员opbHover.Opacity = 0;
,即-1或1。代码:
this.Cursor = Cursors.Hand;
_animationDirection
和int
:代码:
private void Animate(int animationDirection)
{
this._animationDirection = animationDirection;
this.timer.Start();
}
OnMouseEnter
事件,并注意:代码:
OnMouseLeave