您好我在Windform中制作用户界面并使用计时器。这对我来说都很新鲜,所以我对它的理解有点弱。我使用计时器制作侧面菜单动画。
第一个计时器是显示菜单。像这样:
private void ShowFullToolsTimer_Tick(object sender, EventArgs e)
{
FonctionsNatives.dessinerOpenGL();
if (editionToolsMenu.Width >= 200)
ShowFullTools.Stop();
else
editionToolsMenu.Width += 5;
}
隐藏侧边菜单我有类似的东西:
private void HideFullMenu_Tick(object sender, EventArgs e)
{
if (editionToolsMenu.Width > 0)
editionToolsMenu.Width -= 5;
else
HideFullMenu.Stop();
}
我遇到的问题是我想在启动另一个动画之前完全完成一个动画。我一直在使用Application.DoEvent();如果timer.Enable是真的,但我知道这样做很糟糕并导致更多的错误。任何解决方案?
EDIT1:抱歉没有准确。当单击不同组件时,两个计时器都会启动。我也不能写两个结束,例如: ShowfullMenu.Start(): HideFullMenu.Start(); 因为一个做+ =而另一个做= - 。他们会陷入无限循环。将线程置于睡眠状态会停止整个UI。
答案 0 :(得分:0)
在为一个菜单设置动画时停止另一个计时器,然后在完成动画设置后重新启动它(反之亦然)。这是一些未经过测试的代码:
private void ShowFullToolsTimer_Tick(object sender, EventArgs e)
{
FonctionsNatives.dessinerOpenGL();
if (editionToolsMenu.Width >= 200)
{
ShowFullTools.Stop();
// start the other one
HideFullMenu.Start();
}
else
{
editionToolsMenu.Width += 5;
if (HideFullMenu.Enabled)
{
HideFullMenu.Stop();
}
}
}