C# 尝试从其他窗体调用字符串时出现NullReferenceException
我有2个表单,我要做的是从表单1的文本框中获取一个值,然后将它赋给表单2中的其他变量,这样我就可以在表单2中重复使用它,而不用从表单1中重新调用它 表单1(这是一个登录表单) 在表单1中,我有initializeserver、DB、UID和pwd(它们每个都有value,pwd和UID值都是从Textbox获取的),OpenConnection也返回true 然后 表格2C# 尝试从其他窗体调用字符串时出现NullReferenceException,c#,winforms,nullreferenceexception,C#,Winforms,Nullreferenceexception,我有2个表单,我要做的是从表单1的文本框中获取一个值,然后将它赋给表单2中的其他变量,这样我就可以在表单2中重复使用它,而不用从表单1中重新调用它 表单1(这是一个登录表单) 在表单1中,我有initializeserver、DB、UID和pwd(它们每个都有value,pwd和UID值都是从Textbox获取的),OpenConnection也返回true 然后 表格2 public Form1 oF; public MySqlConnection NTD() { M
public Form1 oF;
public MySqlConnection NTD()
{
MySqlConnection F = oF.connection;//It's Highlighted in this line.
return F;
}
public MySqlCommand cmd = new MySqlCommand();
public void A9_Click(object sender, EventArgs e)
{
A9.Text = "X";
string query = "UPDATE orders SET Client=" + Name + " , Stat='1' WHERE No='A9'";
cmd.CommandText = query;
cmd.Connection = NTD();
cmd.ExecuteNonQuery();
}
名称值是从同一表单上的文本框中提取的
没有编译错误和其他编译前错误
但当我成功运行它并单击按钮A9时,它将抛出NullReferenceException
我不确定连接是否为空,因为我可以成功登录并显示表单2
我错过什么了吗?你知道吗
我是个新手,不知道怎么了。如果可以,请尽可能简单地描述它,如果它需要一些进步
谢谢。您似乎忘记了将
的变量设置为Form1的实例。这会导致null
,因此尝试访问连接
成员变量会引发异常。
解决此问题的一种方法是在构造函数中设置它:
public Form2(Form1 parentForm)
{
if(parentForm == null)
throw new ArgumentNullException("parentForm");
this.oF = parentForm;
}
//...
Form2 menu = new Form2(this);
您可以通过在突出显示的行(您提到的那一行)上设置断点来调试此问题,并检查null
您似乎忘记了将oF
变量设置为Form1
的实例。这会导致null
,因此尝试访问连接
成员变量会引发异常。
解决此问题的一种方法是在构造函数中设置它:
public Form2(Form1 parentForm)
{
if(parentForm == null)
throw new ArgumentNullException("parentForm");
this.oF = parentForm;
}
//...
Form2 menu = new Form2(this);
您可以通过在突出显示的行(您提到的那一行)上设置断点来调试此问题,并检查null
您可以通过很少的步骤找到问题所在:添加断点并调试代码。您将看到哪个变量为null(以及为什么)。顺便说一句,为什么+1?在发布问题之前,非常需要一次带调试器的教程……您可以通过很少的步骤找到问题所在:添加断点并调试代码。您将看到哪个变量为null(以及为什么)。顺便说一句,为什么+1?在发布问题之前,使用调试器是非常必要的…谢谢,这是一项工作,但是当我将if函数放在上面时,它本身总是抛出null。但是如果我不放,它的工作就像一个符咒。你知道怎么会这样吗?当然谢谢。有一个打字错误。它应该是If(parentForm==null)
,而不是If(of==null)
,因为of
在赋值之前总是null
。所以我最好使用If函数还是不使用?因为我没有使用它,也没有发现任何问题(现在),所以这是不必要的,但如果您有可公开访问的API,则强烈建议使用它。这叫做参数输入验证。谢谢,这是一项工作,但是当我把if函数放在它上面时,它本身总是抛出null。但是如果我不放它,它的工作就像一个符咒。你知道怎么会这样吗?当然谢谢。有一个打字错误。它应该是If(parentForm==null)
,而不是If(of==null)
,因为of
在赋值之前总是null
。所以我最好使用If函数还是不使用?因为我没有使用它,也没有发现任何问题(现在),所以这是不必要的,但如果您有可公开访问的API,则强烈建议使用它。这叫做参数输入验证。