我需要有关计时器和列表的帮助。
列表包含一次表示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,但我仍然无法一次显示一个字符串。事实上,我只获得最后一个字符串。我想一直旋转字符串。
任何人都可以帮助我。
答案 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++;
}