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 而不是 Parse,因为后者如果无法解析字符串会抛出 FormatException;您可能更喜欢有一个例外,在这种情况下使用 Parse。此外,您应该使用 Decimal.Parse/TryParse 而不是 Int32.Parse 作为数量,它是小数而不是 int。最后,您可以在 int.ToString 调用中指定一种文化,如果您想为特定文化格式化 int(请参阅Int32.ToString())。

于 2012-08-08T17:27:53.127 回答