我正在尝试使用计时器来实现过去使用的一种旧动画,以显示进程正在运行。
我想这样做的方法是在句子中添加点(在标签控件中),例如:
“流程正在运行。” “进程正在运行...”和“进程正在运行...”,限制为3个点,然后恢复为单个点。
我不确定在这里使用计时器是最好的选择,但我认为它应该适用于这样一个简单的例子。
我使用的代码如下:
public string InitialProcessText;
private void StartBtn_Click(object sender, EventArgs e)
{
if(fileName != "No file selected")
{
ValidationLbl.Text = null;
ProcessLbl.Text = "Application is now running.";
//InitialProcessText = ProcessLbl.Text;
ProcessTimer.Start();
}
else
{
ValidationLbl.Text = "No file was added";
}
}
private void StopBtn_Click(object sender, EventArgs e)
{
ProcessTimer.Stop();
}
private void ProcessTimer_Tick(object sender, EventArgs e)
{
_ticks++;
//For every two ticks, ProcessLbl.Text = InitialProcessText
ProcessLbl.Text += ".";
}
我可以添加什么来设置添加2点的限制,然后删除点并再次添加点(我会假设在ProcessTimer_Tick
方法中执行此操作)?
答案 0 :(得分:3)
您可以使用_ticks
变量:
private readonly int _ticksPerUpdate = 2;
private readonly int _maxNumberOfDots = 3;
private void ProcessTimer_Tick(object sender, EventArgs e)
{
_ticks++;
if(_ticks == (_ticksPerUpdate * (_maxNumberOfDots + 1)))
{
_ticks = 0;
ProcessLbl.Text = InitialProcessText;
}
else if(_ticks % _ticksPerUpdate == 0)
{
ProcessLbl.Text += ".";
}
}
每次启动计时器时,请记住重置计时器:
private void StartBtn_Click(object sender, EventArgs e)
{
if(fileName != "No file selected")
{
ValidationLbl.Text = null;
ProcessLbl.Text = "Application is now running.";
InitialProcessText = ProcessLbl.Text;
// reset the variable
_ticks = 0
ProcessTimer.Start();
}
else
{
ValidationLbl.Text = "No file was added";
}
}
答案 1 :(得分:2)
我假设_ticks计算滴答数。然后你可以去:
if(ticks%3 == 0)
{
ProcessLbl.Text = "Application is now running."
}
else
{
ProcessLbl.Text+=".";
}
然后,在第1个刻度,1%3 = 1所以它增加一个点,在第2个刻度,2%3 = 2所以它增加一个点和第3个刻度,3%3 = 0,所以它回到原始
答案 2 :(得分:1)
仅仅因为......这是另一种方法:
private void ProcessTimer_Tick(object sender, EventArgs e)
{
ProcessLbl.Text = ProcessLbl.Text.EndsWith("...") ? ProcessLbl.Text.TrimEnd(".".ToCharArray()) + "." : ProcessLbl.Text + ".";
}