динамическая метка с использованием таймера в c # - PullRequest
0 голосов
/ 22 сентября 2011

Мне нужна метка, текст которой будет изменяться после таймера на один тик. Например, метка 1-го тика таймера будет показывать «1 программа запущена», на метке 2-го тика будет отображаться «2 программы запущены», на метке 3-го тика будет отображаться«3 программы запущены» и так далее.Я новичок в программировании. Любая помощь будет очень полезна.

Ответы [ 2 ]

3 голосов
/ 22 сентября 2011

Ну, вам нужно поддерживать какое-то состояние. Если честно, самый простой способ сделать это - захватить переменную в лямбда-выражении:

int count = 0;
timer.Tick += (sender, args) => {
    count++;
    label.Text = string.Format("{0} {1} running", count,
                               count == 1 ? "program" : "programs");
};

Кроме того, вы можете создать новый класс для поддержания этого состояния:

internal class ProgramCounterTimerHandler
{
    private int count = 0;
    private readonly Label label;

    internal ProgramCounterTimerHandler(Label label)
    {
        this.label = label;
    }

    internal void ShowProgramCount(object sender, EventArgs e)
    {
        count++;
        label.Text = string.Format("{0} {1} running", count,
                                   count == 1 ? "program" : "programs");
    }
}

Then you can use:

timer.Tick += new ProgramCounterTimerHandler(label).ShowProgramCount;

В качестве альтернативы, если вы довольны наличием переменной экземпляра в своем классе, вы можете отслеживать количество таким образом.

0 голосов
/ 22 сентября 2011

Вы пытались обработать событие отметки таймера с помощью sth:

int counter = 1;
private void timer1_Tick(object sender, EventArgs e)
{
    label1.Text = counter + " program running";
    label1.Refresh();   //not necessarily
    counter++;
}
...