2012-12-13 45 views
2

我正在處理列表。我已經能夠確定列表中項目的第一個和最後一個位置。我正在使用getPostion並通過Label顯示項目名稱。我的表單中有三個按鈕:ShowFirstItemShowNextItem(不工作)和ShowLastItem顯示標籤中的相應項目。我對我的下一個項目有問題。我沒有持有目前fruit_tree的會員。所以我不知道如何添加一個int成員或另一個fruit_tree成員current。我如何能夠找出下一個(第一個項目後)並顯示結果?確定列表中當前指向的項目

public class ListForTrees 
{ 

     public fruit_trees GetNextTree() 
      { 
       current = 0; 
       fruit_trees ft = first_tree; 
       int i = 0; 
       while (i != current) 
       { 
        ft = ft.next_tree; 
        i++; 

       } 

       return ft; 
      } 

      } 

      ListForTrees mainlist = new ListForTrees();  

      private void BtnGo_Click(object sender, EventArgs e) 
      { 
       fruit_trees[] ar_items = { new fruit_trees("cherry", 48, 12.95, 3), 
               new fruit_trees("pine", 36, 9.95, 8), 
               new fruit_trees("oak", 60, 14.95, 2), 
               new fruit_trees("peach", 54, 19.95, 3), 
               new fruit_trees("pear", 36, 11.85, 2), 
               new fruit_trees("apple", 62, 13.45, 5) 
              }; 
       mainlist = new ListForTrees(ar_items); 
       fruit_trees current = mainlist.first_tree; 

       while (current != null) 
       { 
        TxtOutput.AppendText(current.ToString() + Environment.NewLine); 
        current = current.next_tree; 
       } 
      } 


      private void ShowFirstItem_Click_1(object sender, EventArgs e) 
      { 
      // Show First Item 
     labelSpecificTree.Text = mainlist.first_tree.GetTreeType; 

      } 

      private void ShowLastItem_Click(object sender, EventArgs e) 
      { 
      //Show Last Item 
     labelSpecificTree.Text = mainlist.last_tree.GetTreeType; 
      } 

     private void ShowNextItem_Click(object sender, EventArgs e) 
      { 
      //Show Next Item 
fruit_trees obj = mainlist.GetNextTree(); 

      if (obj == null) 
      { 
       labelSpecificTree.Text = "No more trees!"; 
      } 
      else 
      { 
       mainlist.current++; 
       labelSpecificTree.Text = obj.next_tree.GetTreeType.ToString();     
      } 
      } 



     } 

回答

1

我想補充

public int current; 

到listoftrees。在構造函數中將其設置爲0;

然後創建一個方法來返回當前fruit_trees對象

public fruit_trees getCurrent() 
{ 
    fruit_trees ft = first_tree; 
    int i = 0; 
    while(i != current) 
    { 
     ft = ft.next_tree; 
     i++; 
    } 
    return ft; 
} 

現在這個方法返回當前,而不是下一個對象。所以你在下一個按鈕事件中有2個選項。
這裏的問題是你想在每次單擊按鈕時移動到下一個樹對象嗎? 如果是這樣,遞增當前屬性,然後調用getCurrent來顯示。如果你想保留電流而不移動(即反覆點擊下一步會導致同樣的結果) 然後顯示getcurrent()。next_tree.tree_type,但不增加當前值。

+0

是的,不錯。我正在嘗試移動到列表中的下一個樹形對象。從按鈕點擊我將不得不增加'當前++'?或者我該怎麼做呢? – CodingWonders90

+1

mainlist.current ++; 之後,調用getCurrent()的下一個調用將有下一個tree_object –

+0

好吧,我添加了增量'mainlist.current ++',然後在按鈕內部調用'getCurrent'(在我的情況下更改爲'GetNextTree'),但第一次,我只有一棵樹,沒有別的。我編輯了新的更改的代碼。請檢查我的問題。 – CodingWonders90

2

我不知道是否能解決你的問題,但你可以在ListForTrees類添加

public fruit_trees current_tree; 

場。

然後,您可以輕鬆地添加顯示下一個方法並將項目指針移動到列表中的下一個項目。記住當前項目可以讓您避免每次從列表中選擇下一棵樹時瀏覽整個列表。 代碼可以是這樣的:

public fruit_trees GetNextTree() 
{ 
    //save currently pointed tree 
    fruit_trees tree = this.current_tree; 
    if (tree != null) 
    { 
     //move current_tree to the next tree, to be returned next time 
     current_tree = current_tree.next_tree; 
     //return saved tree object 
    } 
    return tree; 
} 

爲了使其工作,你也應該記得添加到列表中的第一棵樹引發的current_tree值。您也可以編寫某種ResetNextTreePointer()方法將它指回列表中的第一棵樹。

一些更多的建議代碼:

  • 我想這將是更好的使用屬性爲類中的字段,因此即改變

    public fruit_trees first_tree; 
    

    private fruit_trees first_tree; 
    public fruit_trees First_tree { get { return first_tree; } 
    

    ,因爲它會禁用類以外的任何類來明確修改這些字段。

  • 此代碼:

    if (count == 0) 
    { 
        ... 
    } 
    else if (count != 0) 
    { 
        ... 
    } 
    

    可以改成:

    if (count == 0) 
    { 
        ... 
    } 
    else 
    { 
        ... 
    } 
    
+0

+1 This幾乎工作,我將如何從'ShowNextItem'按鈕完全調用'GetNextTree'以顯示標籤? – CodingWonders90

+0

如果您只是將其實現爲'labelSpecificTree.Text = mainlist.GetNex tTree();',它會在每次點擊時從列表中給你下一棵樹。 –

+0

我試過這種方式,但它給了我錯誤'不能隱式地將類型'TreeFarm.Form1.fruit_trees'轉換爲'string'' – CodingWonders90

相關問題