C#中的定时器和列表<string> </string>

时间:2012-02-16 22:02:43

标签: c#

我需要有关计时器和列表的帮助。

列表包含一次表示5或6的字符串集合。现在,我想在label1上显示字符串1,它应该等待5秒,然后在label1上显示字符串2。我有计时器控制,我在timer_tick事件中指定我的代码。

private void timer1_Tick(object sender, EventArgs e)
    {
        string[] myStatus = myStatusCollection.ToArray();
        int length = myStatus.Length;

        for (int i = 0; i < length; i++)
        {
            string _myStatus = myStatus[i];
            //label1.ResetText();
            MessageBox.Show("Twitter Status =" + _myStatus);
            //label1.Text = _myStatus;
            //label1.Visible = true;
        }

    }

我指定了Elapse = true和interval = 5000,但我仍然无法一次显示一个字符串。事实上,我只获得最后一个字符串。我想一直旋转字符串。

任何人都可以帮助我。

3 个答案:

答案 0 :(得分:3)

那是因为每次定时器事件触发时你都会循环遍历所有字符串。

将您的索引存储在私有变量中,然后使用它。

private int _index = 0;

private void timer1_Tick(object sender, EventArgs e)
{
    string[] myStatus = myStatusCollection.ToArray();

    string _myStatus = myStatus[_index];
    //label1.ResetText();
    MessageBox.Show("Twitter Status =" + _myStatus);
    //label1.Text = _myStatus;
    //label1.Visible = true;

    if(_index == (myStatus.Length - 1))
       _index = 0;
    else
       _index++;
}

答案 1 :(得分:1)

它正在做你告诉它的事情。但是,你告诉它要做的不是你的意思。试试这个。

public class Form1 : Form {

    private string[] statuses = { "A", "B", "C", "D", "E" }; // Init with proper values somewhere
    private int index = 0;

    private void OnTimerTick(object sender, EventArgs e) {
        string status = statuses[index];

        index++;

        if (index == statuses.Length) { // If index = Array.Length means we're 
                                        // outside bounds of array
            index = 0;
        }
    }
}

答案 2 :(得分:0)

我会在Tick之外创建一个int来保持你的位置。重新启动过程时,请确保将其重置为0.

int MyPosition = 0;

private void timer1_Tick(object sender, EventArgs e) 
{ 
    string[] myStatus = myStatusCollection.ToArray(); 
    int length = myStatus.Length; 

    if((MyPosition + 1) > length)
    {
        //Index Out of Range
    }
    else
    {
        string _myStatus = myStatus[MyPosition];
        label1.Text = _myStatus 
    }

    MyPosition++;
}