从一个表单传递到另一个表单的值为空值

时间:2013-02-24 06:08:52

标签: c# winforms

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

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

所以在Form1中我将全局变量声明为

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());




   }

同样在form2中也会发生。

我不确定我错在哪里。 我之前也发过这个问题,但没有得到任何有用的答案。 请帮忙..

要将“ord”的值传递给form2,我将在表单1中调用此代码。

                        SaveAllListItems();
                        //this.Close();
                        PrintOrder m = new PrintOrder(ord);
                        m.Show();

其中PrintOrder是form2

4 个答案:

答案 0 :(得分:2)

  

现在这个“ord”变量从以下方法中获取其值   Form 1中。,

它不是,你在方法中再次定义一个局部变量,你没有在你的方法中设置类级变量。

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

答案 1 :(得分:1)

public static string ord;

简单地使用了static关键字。 Static关键字的优势。

  1. 在整个应用程序中共享内存。
  2. 如果有任何用户更新该值,则此值会获得更新的值,一个用户更新值int x = 18,另一个用户获得值更新。
  3. 编译时绑定时使用的静态关键字。

答案 2 :(得分:0)

而不是

string ord = "ORD" + DateTime.Now.Year + get_next_id();

使用

ord = "ORD" + DateTime.Now.Year + get_next_id();

答案 3 :(得分:0)

这是因为在下面的代码中,您声明了一个名为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

在尝试检索OrderNumber的值之前,需要调用

ord。当您最初声明ord时,该值为null。调用OrderNumber会将其值从null更改为您喜欢的任何值。