0

Windowsフォームアプリケーションで、値の1つを別のフォームに渡そうとしていますが、コードが別のフォームに到達すると、ブレークポイントを使用すると値がnullとして表示されます。

Form1には、OrderNumberを生成するメソッドが1つあり、この注文番号は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キーワードを使用しました。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();
}

OrderNumberordとにかく使用するので、値を返す必要はありません。

OrderNumberの値を取得する前に呼び出す必要がありますord。最初に宣言するときord、値はnullです。呼び出すOrderNumberと、その値がnullから好きなものに変更されます。

于 2013-02-24T06:14:29.090 に答える