0

フォーム間でメソッド値を渡そうとしています。その結果、データを渡したいメソッドを静的にしました。ユーザー入力を収集するために非静的テキスト ボックスを使用しているので、ユーザーからの入力を解析し、その値をパブリック クラス レベルの静的変数に格納し、その値を静的変数に返すパブリック プロパティ メソッドも作成しました。変数を呼び出すメソッド。

public static int laborHours;

public int lHoursB
{
  get
  {
    return laborHours;
  }
  set
  {
    laborHours = int.Parse(lHours.Text);
  }
}

private static decimal laborMethod(decimal laborTotal)
{
  const decimal laborCharge = 50M;
  decimal labor = 0;

  labor = laborCharge * laborHours;
  return labor;
}

public static decimal amountCharged;

public decimal amount
{
  get
  {
    return amountCharged;
  }
  set
  {
    amountCharged = int.Parse(amtBox.Text);
  }
} 

public static int numberOfParts;

public int partsNumber
{
  get
  {
    return numberOfParts;
  }
  set
  {
    numberOfParts = int.Parse(partsBox.Text);
  }
}

private static decimal subtotalMethod(decimal subTotal)
{
  decimal subtotal = 0;

  subtotal = amountCharged * numberOfParts;

  return subtotal;
}

private static decimal subtotal2Method(decimal subtotalTwo)
{
  decimal labor = 0;
  decimal subtotal = 0;

  labor = laborMethod(labor);
  subtotal = subtotalMethod(subtotal);
  subtotalTwo = subtotal + labor;

  return subtotalTwo;
}

private static decimal taxMethod(decimal salesTax)
{
  const decimal tax = .08M;
  decimal sTax = 0;
  decimal sub = 0;
  sub = subtotalMethod(sub);

  sTax = sub * tax;

  return sTax;
}

コンパイラはすべてをクリーンなコンパイルとしてチェックアウトしますが、ここに論理エラーがあり、見つけられないようです。プログラムで簡単なテストを実行すると、すべてのテキスト ボックスが「0」を返します。

助けてください?

4

1 に答える 1

1

あなたのプロパティは、それらが書かれている通常の方法と比較して、後ろから前にあります。代わりに、次のように書くことをお勧めします。

public int lHoursB
{   
  get
  {
    int result = 0;
    int.TryParse(lHours.Text, out result);
    return result;
  }
  set
  {
    lHours.Text = value.ToString();
  }
} 

次に、次のことができます。

lHoursB = 10;

これにより、lHoursテキストボックスが「10」に設定されます。解析ではなくTryParseを使用しました。後者は、文字列を解析できない場合にFormatExceptionをスローするためです。例外を設定したい場合は、Parseを使用してください。また、金額にはInt32.ParseではなくDecimal.Parse / TryParseを使用する必要があります。これは、intではなく10進数です。最後に、特定のカルチャ用にintをフォーマットする場合は、int.ToString呼び出しでカルチャを指定できます(Int32.ToString()を参照)。

于 2012-08-08T17:27:53.127 に答える