2011-06-26 108 views
1

即時獲取對象引用沒有設置爲43行對象的實例,我無法弄清楚爲什麼,我搜索了網頁,似乎無法找到答案。我是C#的新手,一般編程和嘗試學習。如果有人可以幫助我,這將是偉大的C#對象引用未設置爲對象的實例

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.IO; 
using System.Runtime.Serialization.Formatters.Binary; 

namespace test 
{ 
    public partial class Form1 : Form 
    { 
     [Serializable] 
     public class ore 
     { 
      public float Titan; 
      public float Eperton; 
     } 

     ore b1 = null; 
     ore b2 = null; 

     public Form1() 
     { 
      InitializeComponent(); 

      ore b2 = new ore(); 
      ore b1 = new ore(); 
     } 

     private void textBox1_TextChanged(object sender, EventArgs e) 
     { 
      float tempFloat; 

      if (float.TryParse(textBox1.Text, out tempFloat)) 
      { 
       b1.Titan = tempFloat; //line 43; where error happens 
      } 
      else 
       MessageBox.Show("uh oh"); 
     } 

     private void textBox2_TextChanged(object sender, EventArgs e) 
     { 
      float tempFloat; 
      if (float.TryParse(textBox1.Text, out tempFloat)) 
      { 
       b2.Eperton = tempFloat; 
      } 
      else 
       MessageBox.Show("uh oh"); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      List<ore> oreData = new List<ore>(); 
      oreData.Add(b1); 
      oreData.Add(b2); 

      FileStream fs = new FileStream("ore.dat", FileMode.Create); 
      BinaryFormatter bf = new BinaryFormatter(); 
      bf.Serialize(fs, oreData); 
      fs.Close(); 
     } 
    } 
} 
+1

什麼是在線43? – ChrisBint

+1

b1.Titan = tempFloat;是行43 – doc

+0

這不是完整的代碼...它應該工作。編輯:該死的,錯過了。 – Vercas

回答

6

我假設它的任何b1/b2引用失敗。

ore b1 = null; 
ore b2 = null; 

在這裏,我們聲明兩個私有變量爲你的類

ore b2 = new ore(); 
ore b1 = new ore(); 

在這裏,我們聲明瞭兩個局部變量方法調用。你並沒有改變原始變量。將其更改爲:

b2 = new ore(); 
b1 = new ore(); 
+0

很好。也想知道。 – Femaref

+0

這樣一個臭名昭着的小錯誤... – Vercas

+0

真棒沒關係,錯誤消失了。然而,我有一個新問題,該按鈕應該列出礦石並將其寫入程序目錄中名爲ore.dat的文件。我運行該程序,並點擊保存按鈕,但沒有在我的項目目錄中的新文件? – doc

5

您從不指定字段b1。您在構造函數中分配的b1是局部變量。在構造函數的代碼改成這樣:

b2 = new ore(); 
b1 = new ore(); 
3

改變你的構造函數是:

public Form1() 
    { 
     InitializeComponent(); 

     b2 = new ore(); 
     b1 = new ore(); 
    } 
相關問題