2012-04-16 68 views
0

我下面這個視頻:http://www.youtube.com/watch?v=Y63vq_tcTGk,並在8:20他類型的NullReferenceException是未處理#2

ds.Add(a); 
    show_diem(); 

但是一個錯誤出現,當我做ds.Add(一);

我是新來的,所以我還不確定ds是什麼?它可以是任何東西嗎?他宣稱

ds = new ArrayList(); 

在一開始所以它可以是什麼?爲什麼會出現錯誤?這是我的Form1上的代碼。 「員工」是一個類,「employeeId」「firstName」等是文本框。我用「em」而不是「ds」。

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.Collections; 


    namespace Employee_Program 
    { 
     public partial class Form1 : Form 
     { 


    public Form1() 
    { 
     InitializeComponent(); 

    } 

    public ArrayList em; 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     em = new ArrayList(); 
    } 

    private void show_employee() 
    { 
     listView1.Items.Clear(); 
     foreach(Employee a in em) 
     { 
      int i = listView1.Items.Count; 
      listView1.Items.Add(a.FirstName); 
      listView1.Items[i].SubItems.Add(a.LastName); 
      listView1.Items[i].SubItems.Add(a.EmployeeId.ToString()); 
      listView1.Items[i].SubItems.Add(a.YearSalary.ToString()); 

} 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Employee a = new Employee(); 
     a.FirstName = firstName.Text; 
     a.LastName = lastName.Text; 
     a.EmployeeId = float.Parse(employeeId.Text); 
     a.YearSalary = float.Parse(yearSalary.Text); 
     em.Add(a); 
     show_employee(); 

      } 
     } 
    } 

錯誤說:對象引用未設置爲對象的實例。

+2

你確定你的Form1_Load事件被調用嗎? – sgmoore 2012-04-16 17:30:24

+0

該視頻中使用的做法很糟糕。 – 2012-04-16 17:37:17

+0

@sgmoore OH事實證明這是不正確的,但現在我已經重做了它,它的工作原理,但現在GUI有不同的問題。當我點擊按鈕時,只顯示名字值。有任何想法嗎? – user1336868 2012-04-16 17:41:17

回答

2

它看起來像我在編寫代碼來模仿視頻,但是設計者可能已經被用來連線Form1_Load。所以,你需要確保這是連接到你的表單。如果不是,則將永遠不會調用ArrayList的初始化。

如果你進入設計師,你可以點擊表格。然後在「屬性」窗口中選擇「事件」選項卡。找到OnLoad(或Load我不確定在命名)事件。然後在下拉菜單中,您的方法應該顯示爲參數定義將匹配。選擇這個,設計師將會把它連接起來。

佈線應該是這個樣子

form.Load += Form1_Load; 

或者,你可以完成相同的從FormLoad刪除它通過在聲明中這樣做:

public ArrayList em = new ArrayList(); 

最後,你可能只是做這在窗體構造函數中\

public Form1() 
{ 
    em = new ArrayList(); 
    InitializeComponent(); 
} 
1

您正在使用em當它是nu二。要解決這個問題的方法之一是:

public Form1() 
{ 
    em = new ArrayList(); 
    InitializeComponent(); 
} 

但是,您可能有Form1_Load事件沒有連線了另一個問題。

相關問題