0

在我的 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 是另一种根据数据库中的前一个数字生成数字的方法。

现在,当我在下面的代码中使用“ord”变量值时,form1 本身的值是 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

4 回答 4

2

现在这个“ord”变量从 Form1 中的以下方法获取它的值。

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

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;
}
于 2013-02-24T06:11:08.627 回答
1
public static string ord;

Simple 使用了 static 关键字。静态关键字的优势。

  1. 在整个应用程序中共享内存。
  2. 如果任何用户更新该值,则该值将获得类似的更新值,一个用户更新值 int x=18 ,另一个用户获得值更新。
  3. 编译时绑定使用的静态关键字。
于 2013-02-24T06:25:33.827 回答
0

代替

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

利用

ord = "ORD" + DateTime.Now.Year + get_next_id();
于 2013-02-24T06:10:59.987 回答
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时,该值为空。调用OrderNumber会将其值从 null 更改为您喜欢的任何值。

于 2013-02-24T06:14:29.090 回答