计时器返回不需要的格式

Timer returning unwanted formatting

我创建了一个计时器,returns 减少时间:

public static void timerIdle_Tick(object sender, EventArgs e)
{        

    if (tempo >= 60)
    {
        minuto = tempo / 60;
        segundo = tempo % 60;
    }
    else
    {
        minuto = 0;
        segundo = tempo;
    }

    segundo--;
    if (minuto > 0)
    {
        if (segundo < 0)
        {
            segundo = 59;
            minuto--;
        }
    }

    if (minuto == 0 && segundo == 0)
    {
        timerIdle.Stop();
        timerIdle.Dispose();
        dgView.addLinha(2, "config_Teste", "TIMER ACABOU", 0);

    }
    else
    {
        tempo = (minuto * 60) + segundo;

        string temp = minuto + ":" + segundo;
        lblIdle.Text = temp;
        dgView.addLinha(2, "config_Teste", temp, 0);
    }
}

我得到以下结果:

...
1:12
1:11
1:10
1:9
1:8
...
0:0

如果分秒只有一位,我需要加0(零):

01:12
01:11
01:10
01:09
01:08
...
00:00

PadLeft() 函数不起作用,因为我使用的是 C# 7.3 (.NET Framework 4.7.2)。

拜托,帮帮我。

所以这会将您的分钟和秒格式化为两位数

int minuto = 1;
int segundo= 1;
string temp = string.Format($"{minuto:D2}:{segundo:D2}");

输出:

01:01

您只需要在启动Timer时设置倒计时持续时间(以秒为单位),在Tick事件中每秒减1,直到得到0,然后停止计时器。使用TimeSpan.FromSeconds方法格式化时间字符串。

//Class variable...
int segundo = 0;

void WhereYouStartTheTimer()
{
    segundo = 60; //1 Minute
    timerIdle.Interval = 1000; //Fires every 1 second.
    timerIdle.Start();
}

private void timerIdle_Tick(object sender, EventArgs e)
{
    segundo--;

    if (segundo == 0)
    {
        timerIdle.Stop();
        dgView.addLinha(2, "config_Teste", "TIMER ACABOU", 0);
    }
    else
        dgView.addLinha(2, "config_Teste", TimeSpan.FromSeconds(segundo).ToString(@"mm\:ss"), 0);
}

旁注,如果您是设计师创建的,则不需要 timerIdle.Dispose();。如果您创建它并通过代码订阅 Tick 事件,那么您也必须删除处理程序然后处理它:

//...
timerIdle.Stop();
timerIdle.Tick -= timerIdle_Tick;
timerIdle.Dispose();
//...

您可能想阅读 Standard TimeSpan format strings 以了解更多信息。