【问题标题】:C# radiobutton value (boolean) to another classC# 单选按钮值(布尔值)到另一个类
【发布时间】:2015-11-12 19:31:22
【问题描述】:

我试图让用户以单选按钮的形式选择值,并将其发送到另一个进行计算的类。

在 MainForm.cs 我有这个:

private bool ReadInputBMR()
    { bla bla bla...
        if (rbtnFemale.Checked)  ;
        { calCalc.SetGender(2); }
        if (rbtnMale.Checked) ;
        { calCalc.SetGender(1); }
     bla bla 
}

在进行计算的类中,我有这个:类名是:CalorieCalculator.cs

        public void SetGender(int value)
    {
        if (value > 2) 
        { this.isFemale = false; }
       else if (value == 2)  
        { this.isFemale = true; }  

    }

    public bool GetGender()
    {
        if (isFemale == true)
        {
            return isFemale == true;
        }
        else if (isFemale == false)
        {
            return isFemale == false;
        }            
    }

    public double CalcBasMetabolicRateBMR()           
    {
        BMR = (10 * weight) + (6.25 * height) - (5 * age);
        BMRFemale = BMR - 161;
        BMRMale = BMR + 5;
        if (isFemale == true)
            return BMRFemale;
        else
            return BMRMale;
}

我很确定我在某个地方(或任何地方)搞砸了。其他值似乎在起作用,只是单选按钮中的值不起作用。

感谢您的帮助

【问题讨论】:

  • 究竟是什么不起作用?你的课也是公开的吗?如果单选按钮的检查值检出,您是否检查过放置点?
  • 当 rbtnMale 单选按钮被选中并且 SetGender 参数为 1 时,它不匹配您方法中的任何条件,因此 this.isFemale 的值保持为空。
  • 无论选择男性还是女性,我都会得到相同的结果

标签: c# radio-button boolean


【解决方案1】:

问题可能是 SetGender() 被调用,值为 1 并且实现没有做任何事情,因为它检查 >= 2 和 == 2。

顺便说一句,为什么不通过改变使实现更容易(和平等):

public void SetGender(int value)
{
    if (value > 2) 
    { this.isFemale = false; }
   else if (value == 2)  
    { this.isFemale = true; }  
}

public void SetGender(int value)
{
    this.isFemale = (value == 2); 
    // Note: Since 1 is not handled this might be causing your problem
    // In your example when value == 1, nothing happens.
}

改变

public bool GetGender()
{
    if (isFemale == true)
    {
        return isFemale == true;
    }
    else if (isFemale == false)
    {
        return isFemale == false;
    }            
}    

public bool GetGender()
{
    return !isFemale;
}

改变

if (isFemale == true)
    return BMRFemale;
else
    return BMRMale;

return isFemale ? BMRFemale : BMRMale;

一般来说,对枚举类型使用 1、2 等值并不是一个好主意。

更好的是使用:

公共枚举 EGender { Unknown, Male, Female };

这将使您的代码更加清晰。如果您不需要 Unknown 值,则可以直接使用布尔值(如 IsFemale ),而无需 1 和 2 值。

还要考虑诸如 public EGender Gender { get; 之类的属性。放; } 而不是单独的 Get 和 Set 方法。

【讨论】:

    【解决方案2】:

    你的代码应该是这样的

    if (rbtnFemale.Checked==true)
    {
        calCalc.SetGender(2);
    }
    else if (rbtnMale.Checked==true)
    {
        calCalc.SetGender(1);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 2019-09-09
      • 2014-01-20
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 2011-08-11
      • 2012-04-07
      相关资源
      最近更新 更多