2011-10-14 148 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()的任何类的实例。