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

C# 如何选择何时在列表框中循环?,c#,winforms,list,loops,C#,Winforms,List,Loops,我有一个列表框,里面有我想逐一查看的项目,每个项目都应该打印在messagebox中。我想在默认情况下,当它到达列表框的末尾时,停止。但如果我选中复选框“循环列表[x]”,我希望它继续,并在到达底部时重新开始。我该怎么做 这是我现在要循环的代码 int i = 0; i = listBox1.SelectedIndex; i = i + 1; if (i > listBox1.Items.Count - 1) i = 0; listBox1.SelectedIndex = i; Messa

我有一个列表框,里面有我想逐一查看的项目,每个项目都应该打印在messagebox中。我想在默认情况下,当它到达列表框的末尾时,停止。但如果我选中复选框“循环列表[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]”框,这应该是我的代码

这都在我的计时器1中,间隔为5000ms

编辑:另外,当它位于列表框的底部时,我如何使其打印为“您已到达列表的末尾!”呢?

您说这都在“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());
}

这样做的好处是,只需再次启动计时器,就可以在以后重新启动循环

我明白了!谢谢但也要检查我问题中的“编辑”。当它到达列表的末尾时,如何让它打印?编辑:现在看到您的编辑,谢谢!查看我的更新(我对“I”范围的理解是错误的,因为您将其分配给选定的索引。这是一个非常糟糕的变量名称选择,因为它经常被用作迭代变量)。我编写的消息框代码会有点奇怪,因为到达末尾时会同时弹出两个消息框。如果你需要我改变它,请告诉我,否则我将把它作为练习留给你!我只是不明白一件事,那就是(LoopAfterEnd),为什么我需要在结束后进行循环?举个例子,这可能是什么。类似于if(1==1)的任何内容?这是一个虚构的变量:),它表示示例中复选框中的复选框状态。可能是这样的:
if(loopCheckbox.Checked)
可以工作。抱歉搞混了!另外,请注意该检查的“true”条件。它将“i”设置为0,允许循环继续。else停止计时器,停止循环。