【问题标题】:How to choose when to loop through listbox?如何选择何时循环列表框?
【发布时间】:2014-04-15 21:10:35
【问题描述】:

我有一个列表框,其中包含我想要一个一个浏览的项目,并且每个项目都应该打印在一个消息框中。我想默认情况下,当它到达列表框的末尾时,就停止。但是,如果我选中我的复选框“循环通过列表 [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 中,间隔为 5000 毫秒

编辑:另外,我怎样才能让它打印成“你已经到达列表的末尾!”当涉及到列表框的底部?

【问题讨论】:

    标签: c# winforms list loops


    【解决方案1】:

    你说的都是“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) 会起作用。对困惑感到抱歉!另外,请注意该检查的“真实”条件是什么。它将“i”设置为 0,允许循环继续。 else 停止计时器,停止循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 2017-10-17
    • 2021-11-30
    • 1970-01-01
    相关资源
    最近更新 更多