这将是一个简单的问题。我有两种形式。 Form2将字符串传递给Form1。然后Form1在MessageBox中显示输入的字符串。
我的代码在 form2 :
public delegate void PassData(object o);
public PassData pd;
public Form2()
{
pd("Hello World");
InitializeComponent();
}
并在 form1 :
public Form1()
{
InitializeComponent();
var f2 = new Form2();
f2.pd = Arrive;
f2.Show();
}
public void Arrive(object o)
{
MessageBox.Show(o.ToString());
}
问题: pd("Hello World");
处于类型System.NullReferenceException类型的未处理异常
我知道它是空的,但为什么这是一个问题?我将Form2的构造函数中的值传递给它。
答案 0 :(得分:3)
我在Form2的构造函数中传入了一个值。
不,您在初始化Form2
后通过了它。当Form2
的构造函数被调用时,您的pd
值仍为null
,因此NullReferenceException
。
这一行:
var f2 = new Form2();
使其运行:
public Form2()
{
pd("Hello World");
InitializeComponent();
}
您真正想要的是将其作为参数传递给Form2
的构造函数:
public Form1()
{
InitializeComponent();
var f2 = new Form2(Arrive);
f2.Show();
}
public Form2(Passdata passData)
{
pd = passData;
pd("Hello World");
InitializeComponent();
}