尝试从另一个表单调用字符串时NullReferenceException

时间:2014-04-13 16:12:33

标签: c# winforms nullreferenceexception

我有2个表单,我想要做的是从form1上的TextBox获取一个值然后将其分配给form2中的其他变量,这样我就可以在form2中重用它而无需从form1重新调用它

Form1 (这是一个登录表单)

public void LoginBttn_Click(object sender, EventArgs e)
    {
        cnnctString = "SERVER=" + server + ";" + "DATABASE=" + DB + ";" + "UID=" + uid + ";" + "PASSWORD=" + pwd + ";";

        connection = new MySqlConnection(cnnctString); //The one that i want to fetch for the 2nd form

        if (OpenConnection() == true)
        {
            Form2 menu = new Form2();
            menu.Visible = true;
            this.Visible = false;
        }

    }

在form1中我初始化服务器数据库 UID pwd (每个都有值, pwd UID 值从文本框中获取), 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

我不确定 connection 是否为空,因为我可以成功登录并显示form2。

我想念一下吗?对此有何想法?

我是新手而且不知道出了什么问题。如果可以的话,请将其描述为尽可能简单,如果它需要先行的话。

三江源。

1 个答案:

答案 0 :(得分:4)

您似乎忘记将oF变量设置为Form1的实例。这导致oF为null,因此尝试访问connection成员变量会引发异常。 解决此问题的一种方法是在构造函数中设置它:

public Form2(Form1 parentForm)
{
    if(parentForm == null)
        throw new ArgumentNullException("parentForm");
    this.oF = parentForm;
}

//...

Form2 menu = new Form2(this);

您可以通过将突破点设置为突出显示的行(您提到的那一行)并检查null的内容来调试此问题。

相关问题