C# 易委托事件问题

C# 易委托事件问题,c#,winforms,visual-studio-2015,C#,Winforms,Visual Studio 2015,以前是工作,但现在不工作为什么我不知道是什么问题 在示例中,当启动程序并单击按钮时,有2个表单form1有1个按钮form2有1个文本框form1应关闭form2打开,委托变量应写入文本框但不起作用。错误为“System.NullReferenceException发生” 我试过不同的类型,比如 private void button1_Click(object sender, EventArgs e) { Form2 f = new Form2(); f.ShowDialog(

以前是工作,但现在不工作为什么我不知道是什么问题

在示例中,当启动程序并单击按钮时,有2个表单form1有1个按钮form2有1个文本框form1应关闭form2打开,委托变量应写入文本框但不起作用。错误为“System.NullReferenceException发生”

我试过不同的类型,比如

private void button1_Click(object sender, EventArgs e)
{
    Form2 f = new Form2();
    f.ShowDialog();
    kapat("deneme");
}
但仍然不起作用。
谢谢您的回答。

我不确定您想用代码实现什么,但我认为/希望这只是一个简单的示例。因此,这里有一个解决方案:

事件在被引用之前为空。您必须先检查事件,然后才能调用它:

if (kapat =! null)
{
  kapat.Invoke("deneme");
}
一种简洁的方法是使用null运算符:

kapat?.Invoke("deneme");
第二个错误是将第二个表单显示为对话框,因为在对话框关闭之前,您一直在阻塞方法。如果您的单击方法如下所示,它将工作:

private void button1_Click(object sender, EventArgs e)
{
    Form2 f = new Form2();
    f.Show();
    kapat?.Invoke("deneme");
}
如果只想在第二个窗体上显示文本,则不应使用事件。最简单的方法是将字符串传递给第二种形式的构造函数,如下所示:

public Form2(string al)
{
    InitializeComponent();
    textBox1.Text = al;
}
现在,您可以通过以下方式打开表单:

private void button1_Click(object sender, EventArgs e)
{
    Form2 f = new Form2("deneme");
    f.ShowDialog();
}

谢谢你的回答。我会试试。我们不会在堆栈溢出的标题中添加“已解决”。如果您确实解决了问题,请发布问题的答案,然后单击该答案上的“接受”按钮。我们也不会回答以前已经提出和回答的问题。如果在遵循标记副本中的大量建议后,您仍然无法解决问题,请发布一个新问题,解释您在诊断问题时已经做了哪些工作,并以一种超出简单说明您的代码抛出
NullReferenceException
的方式表达您的问题。嗨,Peter,事实上,我在写那个问题之前看到了你的链接主题。但是我找不到适合我的孤独。对不起,如果我的条目重复。第二点是我没有点击“接受”按钮,因为我没有尝试回答我不想操纵谁搜索答案。第三点是,在回答我的问题之前,我发现了一种不同的孤独方式。问题在于打开新表单时代理堆栈的算法,我改变了表单和表单之间的代理位置。我知道这不是最好的孤独,但它的工作,我不能写在这里,因为这不是专业的孤独。非常感谢。
private void button1_Click(object sender, EventArgs e)
{
    Form2 f = new Form2("deneme");
    f.ShowDialog();
}