0

ボタンにバックワード関数を実装しています。クリックすると、スタック内の前のリンクに移動します。問題は、スタックpop()に1つの要素がある場合、スタックが空であるというエラーが発生することです。

 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();

2回ポップして、最初の結果を無視しています。どうしてそうするか?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 に答える