0

我正在按钮上实现 backword 功能。单击时将移动到堆栈中的上一个链接。问题是,如果它在堆栈 pop() 中有一个元素,则会给出堆栈为空的错误。

 private void Backward_Click(object sender, EventArgs e)
{
try
{
if (simpleStack.Count != 0)
{
simpleStack.Pop();
string open = simpleStack.Pop();

PopulateListView(open);

complicatedStack.Push(open);

}

else if (simpleStack.Count == 0)
{
Backward.Enabled = false;

}

当我点击不止一次时,它会工作 n 返回上一个选中的项目。但不显示最后一个。我在 simpleStack 中传递字符串。谁能告诉我我错过了什么?

4

2 回答 2

4

看看你的代码:

simpleStack.Pop();
string open = simpleStack.Pop();

你弹出两次,忽略第一个结果。为什么要这么做?我怀疑你可以删除第一个Pop电话。

另请注意,您的else子句不需要检查simpleStack.Count == 0- 它必须是,否则您将不会评估该else子句。(当然,除非你有多个线程在做一些事情——这不是一个好主意。)

于 2013-01-18T08:54:42.770 回答
0

试试这个 -

private void Backward_Click(object sender, EventArgs e)
    {
        try
        {
            if (simpleStack.Count != 0)
            {
                //simpleStack.Pop();    // Remove this line
                string open = simpleStack.Pop();

                PopulateListView(open);

                complicatedStack.Push(open);

            }
            else if (simpleStack.Count == 0)
            {
                Backward.Enabled = false;
            }
        }
    }
于 2013-01-18T08:57:05.830 回答