我有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。
我想念一下吗?对此有何想法?
我是新手而且不知道出了什么问题。如果可以的话,请将其描述为尽可能简单,如果它需要先行的话。
三江源。
答案 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
的内容来调试此问题。