2013-02-24 141 views
0

在我的Windows窗体应用程序,我试图传递值到另一种形式之一,但是当代码达到另一种形式的数值显示为空,当我使用断点。值从一种形式传递到另一种形式来为空值

在Form1我有生成ORDERNUMBER一个方法,并且此订单号码正被Form1中本身以及窗体2。如果我从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”变量值。

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” 的值传递给窗口2我在形式调用此代码1.

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

其中PrintOrder是窗口2

回答

2

现在这个“ORD”变量会从下面的方法它的价值在 Form1中,

它不是,你的方法再定义一个局部变量,您R值不要设置类在你的方法中的高层变量。

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

我这样做太多,但仍当我把断点InserUser上面代码中,在ord仍然是空.. – 2013-02-24 06:13:42

+0

@AmritSharma,你确定你在呼唤'orderNumber'方法,在另一个方法之前,在'orderNumber'中放置一个断点,看看它是否设置了值 – Habib 2013-02-24 06:14:41

+0

公共字符串OrderNumber()方法没有被中断点击中 – 2013-02-24 06:14:53

0

,而不是

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

使用

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

即使我这样做,仍然是“ORD”为空.. – 2013-02-24 06:12:50

0

这是因为在下面的代码,您声明称为奥德新的本地变量。

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更改为您喜欢的任何值。

+0

如果我跟着你仍然是ord解决方案,当我在Insertuser中放置断点时。 – 2013-02-24 06:20:31

+0

您需要确保在尝试使用'ord'之前调用'OrderNumber'。 – dparpyani 2013-02-24 06:22:17

+0

但是我需要调用ordernumber方法 – 2013-02-24 06:22:28

0
public static string ord; 

简单地使用了静态关键字。 Static关键字的优点。

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