C# 尝试从其他窗体调用字符串时出现NullReferenceException

C# 尝试从其他窗体调用字符串时出现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

我有2个表单,我要做的是从表单1的文本框中获取一个值,然后将它赋给表单2中的其他变量,这样我就可以在表单2中重复使用它,而不用从表单1中重新调用它

表单1(这是一个登录表单)

在表单1中,我有initializeserver、DB、UID和pwd(它们每个都有value,pwd和UID值都是从Textbox获取的),OpenConnection也返回true

然后

表格2

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,则强烈建议使用它。这叫做参数输入验证。