2013-01-18 51 views
0

即時通訊在按鈕上實現後退功能..當點擊移動到堆棧中的前一個鏈接....問題是如果它有一個元素在彈出堆棧()它給棧空的錯誤...無法顯示堆棧中的最後一個項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趨向回到先前的項目selected.but不顯示最後一個.... IM傳遞的SimpleStack串....可使人體telll什麼即時通訊失蹤

回答

4

看看你的代碼:

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

你會彈出兩次,而忽略第一個結果。爲什麼要這麼做?我懷疑你可以刪除第一個Pop電話。

另請注意,您的else子句不需要檢查simpleStack.Count == 0 - 它必須是,否則您不會評估else子句。 (除非你有多個線程執行過程中的東西 - 這不會是一個好主意。)

+0

PLZ看到上面的評論對於line..the問題是這樣的當我推動目錄的路徑我brose堆棧中.....我需要顯示的基本項目的堆棧也...和simplestack.pop當被調用的第一個只刪除項目在頂部然後它來到下一個聲明.... – engineer41

+0

我需要把某種條件刪除頂部的元素...我想 – engineer41

+0

@ engineer41:在你發佈的代碼中沒有任何評論。在之前和之後有一些(有些令人費解的)陳述...但基本上不清楚你爲什麼想要流行兩次。當只有一個元素時,*會*失敗,因爲有希望的顯而易見的原因。 –

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; 
      } 
     } 
    } 
+0

不,它不以這種方式工作...因爲當前我所在的目錄(路徑)被重複,然後它移回到前一個路徑,然後不顯示最後一個路徑(從我開始的地方)它禁用按鈕 – engineer41

+0

我正在使用該行,因爲我想刪除堆棧的最頂端的元素,然後把它扔在任何地方...... simapleStack.pop做到了這一點,但確定如果我刪除它仍然錯過了堆棧的所有基礎元素.. :(PLZ幫助 – engineer41