2011-10-14 174 views
1

我正在我的程序中創建一個保存選項,用於保存對文件的更改。我正在使用此代碼來保存並獲取MessageBox以顯示進程的結果,我在此行上收到錯誤「對象引用未設置爲對象的實例」。從方法返回布爾值

 SaveFileCheck = StockHandler.SaveChangesToFile(); 

這是我的代碼

private void Save_Click(object sender, EventArgs e) 
    { 

     bool SaveFileCheck = false; 
     var result = MessageBox.Show("Are you sure you want to Save the changes ?", "My Application", 
     MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk); 
     if (result == DialogResult.Yes) 
     {   

       SaveFileCheck = StockHandler.SaveChangesToFile(); 
       if (SaveFileCheck) 
       { 
        MessageBox.Show("The process was a success"); 
       } 
       else 
       { 
        MessageBox.Show("The process failed please make sure that the file is not been  used and try again"); 
       } 

      //Save the file back 


     } 
    } 
} 
} 

    public bool SaveChangesToFile() 
    { 
     try 
     { 
      if (FileName != null) 
      { 
       using (StreamWriter Write = new StreamWriter(FileName, false)) 
       { 
        foreach (Stock s in FileStockList) 
        { 
         Write.Write(s.ToString() + "\r\n"); 

        } 

       } 
      } 
      else { 
       return false; 
      } 

     } 
     catch(IOException ex) 
     { 
      return false; 
      throw new ArgumentException("something went wrong an error" + ex + "is been cought"); 

     } 
     return true; 


    } 
+1

'StockHandler'必須爲'null';你確定你正在實例化它嗎? (如'StockHandler = new StockHandler()') –

+0

'StockHandler'爲'null',在調用方法之前爲其指定一個類實例 – BrokenGlass

+0

SaveChangesToFile中的哪行引發異常?它是「foreach(FileStockList中的股票)」嗎?如果是這樣的話,那麼'FileStockList'仍然是'null' - 你忘了創建它。 –

回答

2

StockHandler爲空。

如果StockHandler不是static類,你需要創建它的一個實例之前,你可以調用它的方法:

var handler = new StockHandler(); 
SaveFileCheck = handler.SaveChangesToFile(); 

或者,如果StockHandler是一個成員變量:

StockHandler = new // something 
+0

我編輯的代碼stockhandler是stockhelper的實例,其中savechangestofile方法是他們 –

2

你還沒有顯示什麼StockHandler,或者你從哪裏得到 - 但它看起來是空的。您將需要它作爲對有效對象的引用。根據您提供的代碼,我們可以說的沒有太多。

請注意,這有什麼也沒有用返回bool的方法做。

1

這可能是StockHandler爲空,或者說在SaveChangesToFile方法爲空或無效。

編輯

在這裏看到:

private StockHelper StockHandler; 
StockHandler.SaveChangesToFile(); // = bang :(

您需要初始化StockHelper實例:

private StockHelper StockHandler = new StockHelper(); 
StockHandler.SaveChangesToFile(); // = okay :) 

我假定這段代碼不能編譯,這可能意味着StockHandler爲空。否則,該錯誤可能指向SaveChangesToFile方法。其次,您需要吞下SaveChangesToFile()方法中的異常(不可取),或者您需要刪除return語句並拋出異常。如果你決定拋出一個異常,它肯定不是一個ArgumentException,因爲它與提供給該方法的參數無關(或缺少)。

0

什麼是股票處理程序 - 您的SaveChangesToFile方法是一個實例方法 - 因此您是否將一個變量「StockHandler」實例化爲包含方法SaveChangesToFile()的任何類的實例。