Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从一个窗体传递到另一个窗体的值为空值_C#_Winforms - Fatal编程技术网

C# 从一个窗体传递到另一个窗体的值为空值

C# 从一个窗体传递到另一个窗体的值为空值,c#,winforms,C#,Winforms,在我的windows窗体应用程序中,我试图将一个值传递给另一个窗体,但当代码到达另一个窗体时,当我使用断点时,该值显示为null 在Form1中,我有一个生成订单号的方法,该订单号由Form1本身和Form2使用。如果我从Form2调用Form1.OrderNumber,它将生成不同的订单号。我希望两张表格都有相同的订单号 所以在表1中,我声明全局变量为 public string ord; 现在,这个“ord”变量的值来自下面的Form1方法 public string orderNumb

在我的windows窗体应用程序中,我试图将一个值传递给另一个窗体,但当代码到达另一个窗体时,当我使用断点时,该值显示为null

在Form1中,我有一个生成订单号的方法,该订单号由Form1本身和Form2使用。如果我从Form2调用Form1.OrderNumber,它将生成不同的订单号。我希望两张表格都有相同的订单号

所以在表1中,我声明全局变量为

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关键字。静态关键字的优点

  • 在整个应用程序中共享内存
  • 如果任何用户更新该值,则该值会得到这样的更新值,一个用户会更新值int x=18,另一个用户会得到值更新
  • 编译时绑定上使用的静态关键字
  • Simple使用了static关键字。静态关键字的优点

  • 在整个应用程序中共享内存
  • 如果任何用户更新该值,则该值会得到这样的更新值,一个用户会更新值int x=18,另一个用户会得到值更新
  • 编译时绑定上使用的静态关键字

  • 我也这样做了,但当我在上面的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仍然为空。您需要确保在