我正在开发一个简单的程序。接受Form1中的arraylist并在form2上显示其内容,我收到此错误.Plz启发我..编码就是这样..
Form1.cs的..............
public partial class Form1 : Form
{
ArrayList alcar;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string name = textBox1.Text; ; int quantity = int.Parse(textBox2.Text);
car c = new car(name, quantity);
if (alcar != null)
{
alcar.Add(c);
}
else
{
alcar = new ArrayList();
alcar.Add(c);
}
Form2 f2 = new Form2();
f2.Show();
}
public ArrayList getArray()
{
return alcar;
}
}
class car
{
string name; int quantity;
public string NAME
{
get { return name; }
set { name = value; }
}
public int QUANTITY
{
get { return quantity; }
set { quantity = value; }
}
public car(string n, int q)
{
name = n; quantity = q;
}
}
FORM2.cs .........................
public partial class Form2 : Form
{
ArrayList al;
public Form2()
{
Form1 f1 = new Form1();
if (al != null)
{
al = f1.getArray();
}
else
{
al = new ArrayList();
al = f1.getArray();
}
InitializeComponent();
foreach (car c in al) // this lne is causing error
{
label1.Text = c.NAME;
label2.Text = Convert.ToString(c.QUANTITY);
}
}
}
答案 0 :(得分:4)
如果f1.getArray()
返回null
,那就是我期望的例外情况。
但问题在于:
// In Form2
Form1 f1 = new Form1();
这会创建一个 new Form1
实例,而不是您创建汽车的实例。它将在数组中没有任何内容。在这个新实例中,您永远不会初始化alcar
或填充它,因此默认情况下为null
。获取此null
对象并尝试迭代它是您的错误来源。
重新考虑您的设计,以便直接将数组传递给第二个表单(在自定义构造函数或属性上)。
答案 1 :(得分:1)
为什么不在字段声明中编写new
,这将简化您的代码:
public partial class Form1 : Form
{
ArrayList alcar = new ArrayList(); // DO THIS HERE!
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string name = textBox1.Text; ; int quantity = int.Parse(textBox2.Text);
car c = new car(name, quantity);
//JUST ADD - without checking for null!
alcar.Add(c);
Form2 f2 = new Form2();
f2.Show();
}
public ArrayList getArray()
{
return alcar; //its non-null - guaranteed!
}
//...
}
答案 2 :(得分:0)
您在Form2的ctor中创建Form1的新实例,它从不显示它的UI,因此当您说al = f1.getArray()时,永远不会被点击。在Form2的ctor中,它返回一个空引用。
使用已存在的Form1的引用,而不是创建新引用。
答案 3 :(得分:0)
除非单击该按钮,否则不会在Form1中实例化ArrayList alcar。您需要检查null并在Form1的GetArray方法中实例化alcar。或者,在Form1的构造函数中实例化alcar。
答案 4 :(得分:0)
在Form2中,您创建一个Form1的新实例:
Form1 f1 = new Form1();
您从未为该特定实例启动alcar
。您需要获取Form1的实例,其中用户单击了button1。
答案 5 :(得分:0)
试试这个
public ArrayList getArray()
{
if(null == alcar)
alcar = new ArrayList();
return alcar;
}
答案 6 :(得分:0)
ArrayList alcar; 在没有元素的情况下创建,当你调用GetArray()时,它将返回null并且你有异常 您可以在Form1中进行的一种溶剂
Form2 f2 = new Form2(alcar);
f2.Show();
和form2
ArrayList al = new ArrayList();
public Form2(ArrayList alcar)
{
al = alcar;
InitializeComponent();