以前是工作但是现在不工作为什么我不知道这是什么问题?
在示例中有2个表单form1有1个按钮form2在启动程序时有1个文本框并单击按钮form1应该关闭,form2打开并且委托变量应该写在文本框中但不能正常工作。错误是" System.NullReferenceException发生"
public partial class Form1 : Form
{
public delegate void kapatici(string al);
public static event kapatici kapat;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
kapat("deneme");
Form2 f = new Form2();
f.ShowDialog();
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
Form1.kapat += Form1_kapat;
}
private void Form1_kapat(string al)
{
textBox1.Text = al;
//throw new NotImplementedException();
}
}
我尝试过不同的类型,例如
private void button1_Click(object sender, EventArgs e)
{
Form2 f = new Form2();
f.ShowDialog();
kapat("deneme");
}
但仍无效。 谢谢你的回答。
答案 0 :(得分:0)
我不确定你想用代码实现什么 - 但我认为/希望它只是一个极小的例子。所以这是一个解决方案:
在被捕之前,事件为空。您必须在调用之前检查事件:
if (kapat =! null)
{
kapat.Invoke("deneme");
}
执行此操作的紧凑方法是使用null-operator:
kapat?.Invoke("deneme");
第二个错误是将第二个表单显示为对话框,因为在对话框关闭之前,您将阻止方法。如果您的click方法如下所示,它将起作用:
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();
}