2015-04-16 102 views
1

我正在處理一個new按鈕,用於在單擊時重置表單應用程序。 但是我遇到了一個我似乎無法解決的問題。無法清除列表框

基本上我想要做的就是當點擊按鈕new時清除列表框。

「新建」按鈕應該初始化程序,與 啓動時一樣(但不用重新啓動應用程序)。如果未保存數據 ,則允許用戶(通過消息框)確認 繼續進行,而不保存當前數據或返回到當前的 會話。

這裏是我試了一下:

private void mnuNew_Click(object sender, EventArgs e) 
    { 
     for (int index = 0; index < animalmgr.Count; index++) 
     { 
      Animal animal = animalmgr.GetAt(index); 

      if (animal != null) 
      { 
       // error message 
       DialogResult dialogResult = MessageBox.Show("The data will be lost. Continue?", "Are you sure?", MessageBoxButtons.YesNo); 
       if (dialogResult == DialogResult.Yes) 
       { 
        InitializeGUI(); 
       }  
       else if (dialogResult == DialogResult.No) 
       { 
       } 
      } 

      else 
      { 
       ClearLists(); <--------This does not work! 
      } 
     } 
    } 


private void InitializeGUI() 
     { 
      animalmgr.DeleteAll(); 
      Resultlst.Items.Clear(); 
      foodItemslst.Items.Clear(); 
     } 

public void ClearLists() 
     { 
      Gendercmb.DataSource = Enum.GetValues(typeof(GenderType)); 
      Categorylst.DataSource = Enum.GetValues(typeof(Categorytype)); 
      Resultlst.Items.Clear(); 
      foodItemslst.Items.Clear(); 
     } 

是什麼工作:如果animal對象不是null它顯示一個消息框。

什麼行不通:當我打開一個文件,並在列表框中顯示的對象時,new按鈕不會清除列表。原因是因爲animal對象在加載文件並顯示後爲空,但它應該調用else並清除列表,但不是。

UPDATE:

問題仍未所述的方法ClearLists()。問題是,if statement,似乎從來沒有去調用它。問題不在ClearLists()方法本身。問題是它永遠不會被調用。

+0

你調試過嗎? 「動物」實際上是否爲空? – Blorgbeard

+1

首先,我將首先在代碼中放置斷點,然後調試代碼並逐步完成此'foodItemslst'對象的作用域。 – MethodMan

+0

如果'animal'不爲null,則if語句'將是真實的,並顯示消息框 –

回答

2

我認爲問題出在

animal != null 

看看你的邏輯,你的邏輯相比,上面一行給出animal值,即使這個值是0,因此animal從未空,因爲它總是有價值的。

+0

理論上該值可能爲空。 – Blorgbeard

+0

這是一個公平的假設,但問題在於OP沒有提供的代碼 - 無論是'animalmgr'還是'GetAt()'方法(如果Microsoft提供了GetAt()方法,請糾正我)。 –

+0

這實際上是正確的解決方案。謝謝你。 –

0

試試這個。

public void ClearLists() 
{ 
    Gendercmb.DataSource = Enum.GetValues(typeof(GenderType)); 
    Categorylst.DataSource = Enum.GetValues(typeof(Categorytype)); 
    Resultlst.DataSource = new List<ListItem>(); 
    foodItemslst.DataSource = new List<ListItem>(); 
} 

記住,如果這是一個asp.net web表單應用程序,您還需要調用foodItemslst和Resultlst雙方的DataBind()dunction。

+0

謝謝,但問題不在於ClearLists()方法' 問題是'If-statement'永遠不能到達'else語句' –

+0

將一個MessageBox放置在你的ClearLists )函數只是爲了確保函數被調用。因爲必須調用if或else語句。除非你的mnuNew_Click()事件根本沒有被解僱。或者另一種情況可能是animalmgr是空的。 –

+0

我按照你的說法試過,並且消息框沒有顯示。正如我想的那樣,'else語句'永遠不會被調用 –