尝试从其他表单调用字符串时出现NullReferenceException

本文关键字:NullReferenceException 字符串 调用 其他 表单 | 更新日期: 2023-09-27 17:58:17

我有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;
        }
    }

在表单1中,我初始化了服务器数据库UIDpwd(它们中的每一个都有值,pwdID的值都是从Textbox中获取的),并且OpenConnection也返回true。

然后在上

Form2

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

我不确定连接是否为null,因为我可以成功登录并显示表单2。

我错过什么了吗?你知道这个吗?

我是个新手,不知道怎么了。如果可以的话,如果需要预付款,请尽可能简单地描述。

谢谢。

尝试从其他表单调用字符串时出现NullReferenceException

您似乎忘记了将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是什么。