使用代理在表单之间进行通信

时间:2015-12-06 12:20:05

标签: c# winforms delegates

这将是一个简单的问题。我有两种形式。 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的构造函数中的值传递给它。

1 个答案:

答案 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();
}