C# 从一个窗体传递到另一个窗体的值为空值
在我的windows窗体应用程序中,我试图将一个值传递给另一个窗体,但当代码到达另一个窗体时,当我使用断点时,该值显示为null 在Form1中,我有一个生成订单号的方法,该订单号由Form1本身和Form2使用。如果我从Form2调用Form1.OrderNumber,它将生成不同的订单号。我希望两张表格都有相同的订单号 所以在表1中,我声明全局变量为C# 从一个窗体传递到另一个窗体的值为空值,c#,winforms,C#,Winforms,在我的windows窗体应用程序中,我试图将一个值传递给另一个窗体,但当代码到达另一个窗体时,当我使用断点时,该值显示为null 在Form1中,我有一个生成订单号的方法,该订单号由Form1本身和Form2使用。如果我从Form2调用Form1.OrderNumber,它将生成不同的订单号。我希望两张表格都有相同的订单号 所以在表1中,我声明全局变量为 public string ord; 现在,这个“ord”变量的值来自下面的Form1方法 public string orderNumb
public string ord;
现在,这个“ord”变量的值来自下面的Form1方法
public string orderNumber()
{
string ord = "ORD" + DateTime.Now.Year + get_next_id();
return ord;
}
其中get_next_id是另一种根据数据库中的前一个数字生成数字的方法
现在在form1中,当我在下面的代码中使用“ord”变量值时,值为null
InsertUser(maskedTextBox1.Text, comboBox1.Text, maskedTextBox2.Text, maskedTextBox3.Text, maskedTextBox4.Text, maskedTextBox5.Text,
maskedTextBox6.Text, maskedTextBox7.Text, maskedTextBox8.Text, maskedTextBox9.Text, listItems, DateTime.Now, maskedTextBox10.Text, ord, get_next_id());
}
同样的情况也发生在表2中
我不确定我错在哪里。
我以前也发过这个问题,但没有收到任何有用的答案。
请帮忙
为了将“ord”的值传递给form2,我在form1中调用了这个代码
SaveAllListItems();
//this.Close();
PrintOrder m = new PrintOrder(ord);
m.Show();
其中,PrintOrder是form2,而不是
string ord = "ORD" + DateTime.Now.Year + get_next_id();
使用
而不是
string ord = "ORD" + DateTime.Now.Year + get_next_id();
使用
现在,这个“ord”变量从中的以下方法获取其值
表格一
它不是,您正在方法中再次定义局部变量,您没有在方法中设置类级别变量
public string orderNumber()
{
string ord = "ORD" + DateTime.Now.Year + get_next_id();
^^^^^^^^^^
//indicating a local variable, not class level
return ord;
}
应该是:
public string orderNumber()
{
ord = "ORD" + DateTime.Now.Year + get_next_id();
return ord;
}
现在,这个“ord”变量从中的以下方法获取其值
表格一
它不是,您正在方法中再次定义局部变量,您没有在方法中设置类级别变量
public string orderNumber()
{
string ord = "ORD" + DateTime.Now.Year + get_next_id();
^^^^^^^^^^
//indicating a local variable, not class level
return ord;
}
应该是:
public string orderNumber()
{
ord = "ORD" + DateTime.Now.Year + get_next_id();
return ord;
}
这是因为在下面的代码中,您声明了一个名为ord的新局部变量
public string orderNumber()
{
string ord = "ORD" + DateTime.Now.Year + get_next_id();
return ord;
}
要使其工作,请将上述功能更改为:
public void OrderNumber()
{
ord = "ORD" + DateTime.Now.Year + get_next_id();
}
OrderNumber
不需要返回值,因为您将以任何方式使用ord
在尝试检索
ord
的值之前,需要调用OrderNumber
。最初声明ord
时,该值为空。调用OrderNumber
会将其值从null更改为您喜欢的任何值。这是因为在下面的代码中,您正在声明一个名为ord的新局部变量
public string orderNumber()
{
string ord = "ORD" + DateTime.Now.Year + get_next_id();
return ord;
}
public static string ord;
要使其工作,请将上述功能更改为:
public void OrderNumber()
{
ord = "ORD" + DateTime.Now.Year + get_next_id();
}
OrderNumber
不需要返回值,因为您将以任何方式使用ord
在尝试检索ord
的值之前,需要调用OrderNumber
。最初声明ord
时,该值为空。调用OrderNumber
会将其值从null更改为您喜欢的任何值
public static string ord;
Simple使用了static关键字。静态关键字的优点
我也这样做了,但当我在上面的Inseuser代码中放置断点时,ord仍然为空。@AmritSharma,您确定要调用方法
orderNumber
,在另一个方法之前,在orderNumber
中放置断点,然后查看它是否设置了值公共字符串orderNumber()方法没有被断点击中,我只是使用OrderNumber()方法的值,我需要调用该方法吗?@AmritSharma,是的,您需要调用该方法,为了获得执行,您可以在方法InputUser
参数中指定它,也可以在ord
的位置指定它,这将设置ord的值,再加上您将获得ord的值,因为该方法返回的是这样的:“InsertUser”(maskedTextBox1.Text,comboBox1.Text,maskedTextBox2.Text,maskedTextBox3.Text,maskedTextBox4.Text,maskedTextBox5.Text,maskedTextBox6.Text,maskedTextBox7.Text,maskedTextBox8.Text,maskedTextBox9.Text,列表项,日期时间。现在,maskedTextBox10.Text,orderNumber(),get_next\u id());
我也这么做了,但当我在上面的Inseuser代码中放置断点时,ord仍然为空。@AmritSharma,您确定要调用方法orderNumber
,在另一个方法之前,在orderNumber
中放置断点,然后查看它是否设置了值public string orderNumber()方法在allI am处没有断点,只使用OrderNumber()的值方法,我需要调用该方法吗?@AmritSharma,是的,您需要调用该方法,为了获得执行,您可以在方法InputUser
参数中指定它,也可以在ord
中指定它,这将设置ord的值,再加上您将获得ord的值,因为该方法返回的是这样的。”:InsertUser(maskedTextBox1.Text,comboBox1.Text,maskedTextBox2.Text,maskedTextBox3.Text,maskedTextBox4.Text,maskedTextBox5.Text,maskedTextBox6.Text,maskedTextBox7.Text,maskedTextBox8.Text,maskedTextBox9.Text,列表项,日期时间。现在,maskedTextBox10.Text,orderNumber(),get\u next\u id())
当我在Insertuser中设置断点时,如果我遵循您的解决方案,ord仍然是空的。您需要确保在尝试使用ord
之前调用OrderNumber
。但是我需要在哪里调用OrderNumber方法,这取决于您何时可以调用get\u next\u id()
方法。如果我按照您的解决方案,当我在Insertuser中放置断点时,ord仍然为空。您需要确保在