如何选择何时在列表框中循环

本文关键字:列表 循环 何时 何选择 选择 | 更新日期: 2023-09-27 17:58:25

我有一个项目列表框,我想逐一查看,每个项目都应该打印在一个消息框中。默认情况下,当它到达列表框的末尾时,我想停止。但如果我选中复选框"循环列表[x]",我希望它继续,并在它到达底部时重新开始。我该怎么做?

这是我现在要循环使用的代码。

int i = 0;
i = listBox1.SelectedIndex;
i = i + 1;
if (i > listBox1.Items.Count - 1)
i = 0;
listBox1.SelectedIndex = i;
MessageBox.Show("Item: " + listBox1.SelectedItem.ToString());

然而,这永远不会结束,它只是继续循环。如果它在底部,我该如何检查它是否停止?如果我选中了"循环通过列表[x]"框,这应该是我的代码。。。

这都在我的Timer1中,间隔5000ms

edit:还有,当它出现在列表框的底部时,我如何让它打印成"你已经到达列表的末尾!"?

如何选择何时在列表框中循环

你说这都在"Timer1"中,这意味着代码实际上看起来像:

private void TimerElapsed(...)
{
    int i = 0;
    i = listBox1.SelectedIndex;
    i = i + 1;
    if (i > listBox1.Items.Count - 1)
    i = 0;
    listBox1.SelectedIndex = i;
    MessageBox.Show("Item: " + listBox1.SelectedItem.ToString());
}

当你到达终点时,你设置i=0,这只允许循环继续而不抛出。要停止循环,还需要停止计时器调用此函数。

正确的代码是:

private void TimerElapsed(...)
{
    int i = 0;
    i = listBox1.SelectedIndex;
    i++;
    if (i > listBox1.Items.Count - 1)
    {
       MessageBox.Show("End of list reached!");
       if (LoopAfterEnd)
          i = 0;
       else
          Timer1.Stop();
    }
    listBox1.SelectedIndex = i;
    MessageBox.Show("Item: " + listBox1.SelectedItem.ToString());
}

也可以写成:

private void TimerElapsed(...)
{
    int i = 0;
    i = listBox1.SelectedIndex;
    i++;
    if (i > listBox1.Items.Count - 1)
    {
       MessageBox.Show("End of list reached!");
       i = 0;
       if (!LoopAfterEnd)
          Timer1.Stop();
    }
    listBox1.SelectedIndex = i;
    MessageBox.Show("Item: " + listBox1.SelectedItem.ToString());
}

它的优点是,只需再次启动计时器,就可以让您稍后重新启动循环!