【问题标题】:NullReferenceException was unhandled #2NullReferenceException 未处理 #2
【发布时间】:2012-04-28 01:21:19
【问题描述】:

我正在关注这个视频:http://www.youtube.com/watch?v=Y63vq_tcTGk,他在 8:20 打字

    ds.Add(a);
    show_diem();

但是当我执行 ds.Add(a); 时出现错误;

我是新手,所以我仍然不确定 ds 是什么?可以是什么吗?他宣称

   ds = new ArrayList();

在开始时,它可以是任何东西吗?为什么会弹出错误?这是我的 Form1 上的代码。 “Employee”是一个类,“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();

            }
        }
    }

错误提示:对象引用未设置为对象的实例。

【问题讨论】:

  • 你确定你的 Form1_Load 事件被调用了吗?
  • 该视频中使用的做法很糟糕。
  • @sgmoore OH 原来这是不正确的,但现在我重做了它,它可以工作,但 GUI 现在有不同的问题。当我单击按钮时,仅显示名字值。有什么想法吗?

标签: c# nullreferenceexception unhandled


【解决方案1】:

在我看来,您正在编写代码来模仿视频,但设计师可能已习惯于连接 Form1_Load。因此,您需要确保这已连接到您的表单。如果不是,则永远不会调用 ArrayList 的初始化。

如果你进入设计器,你可以点击表单。然后在“属性”窗口中,选择“事件”选项卡。找到OnLoad(或Load我不确定命名)事件。然后在下拉列表中,您的方法应显示为参数定义将匹配。选择这个,设计师就会把它连接起来。

接线应该类似于

form.Load += Form1_Load;

或者,您可以通过在声明中执行以下操作从 FormLoad 中删除它来完成相同的操作:

public ArrayList em = new ArrayList();

最后,您可以在 Form 构造函数中执行此操作\

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

【讨论】:

    【解决方案2】:

    当 em 为空时,你会尝试使用它。一种解决方法是:

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

    但是,您可能会遇到另一个问题,即 Form1_Load 事件未连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多