0

我觉得这是一堆你知道我的意思。它有效,但我觉得我在页面生命周期(加载和回发)甚至我在每个 if 语句中的冗余方面都做得过火了。

会发生什么:

  1. 此方法在页面加载时调用(无论是回发还是其他)
  2. 如果用户提交表单,它会减少他们的总积分(这些单选按钮下方有一个按钮,允许他们提交和申请积分)。

因此,我也在用户声明点(提交)之后立即调用此方法,这会将这些点从他们下次的总数中删除。因此,根据他们帐户中的总积分,我需要在上次提交页面刷新后启用/禁用这些单选按钮

private void SetPointsOptions()
{
    int totalPoints = customer.TotalPoints;

    rbn200Points.Text = "200 pts";
    rbn250Points.Text = "250 pts";
    rbn400Points.Text = "400 pts";
    rbn500Points.Text = "500 pts";
    rbn600Points.Text = "600 pts";

    // clear state of radio buttons & disable submit
    if (totalPoints < 200)
    {
        rbn200Points.Enabled = false;
        rbn250Points.Enabled = false;
        rbn400Points.Enabled = false;
        rbn500Points.Enabled = false;
        rbn600Points.Enabled = false;

        rbn200Points.Checked = false;
        rbn250Points.Checked = false;
        rbn400Points.Checked = false;
        rbn500Points.Checked = false;
        rbn600Points.Checked = false;

        btnClaimRewardPoints.Enabled = false;
        return;
    }

    if(totalPoints >= 200 && totalPoints < 250)
    {
        rbn200Points.Enabled = true;
    }
    else if(totalPoints >= 250 && totalPoints < 400)
    {
        rbn200Points.Enabled = true;
        rbn250Points.Enabled = true;
    }
    else if(totalPoints >= 400 && totalPoints < 500)
    {
        rbn200Points.Enabled = true;
        rbn250Points.Enabled = true;
        rbn400Points.Enabled = true;
    }
    else if(totalPoints >= 500 && totalPoints < 600)
    {
        rbn200Points.Enabled = true;
        rbn250Points.Enabled = true;
        rbn400Points.Enabled = true;
        rbn500Points.Enabled = true;
    }
    else if(totalPoints >= 600)
    {
        rbn200Points.Enabled = true;
        rbn250Points.Enabled = true;
        rbn400Points.Enabled = true;
        rbn500Points.Enabled = true;
        rbn600Points.Enabled = true;
    }
}
4

6 回答 6

8

鉴于我没有错过您的代码中的任何重要内容:

private void SetPointsOptions()
{
    int totalPoints = customer.TotalPoints;
    rbn200Points.Enabled = totalPoints >= 200;
    rbn250Points.Enabled = totalPoints >= 250;
    rbn400Points.Enabled = totalPoints >= 400;
    rbn500Points.Enabled = totalPoints >= 500;
    rbn600Points.Enabled = totalPoints >= 600;
}
于 2009-11-09T22:31:19.597 回答
2

我无法谈论您如何/如果/何时启动所有这些,但是可以减少明确的冗长。例如,您启用各种按钮的最后一位可以简化为:

if(totalPoints > 200)
{
    rbn200Points.Enabled = true;
}
if(totalPoints > 250)
{
    rbn250Points.Enabled = true;
}
if(totalPoints > 400)
{
    rbn400Points.Enabled = true;
}
 if(totalPoints > 500)
{
    rbn500Points.Enabled = true;
}
if(totalPoints > 600)
{
    rbn600Points.Enabled = true;
}
于 2009-11-09T22:34:01.870 回答
2

天哪,伙计。这是大量的代码重复。

我有一段时间没有接触 C#,也没有 VS,但它应该是这样的。

var points2buttons = new Dictionary<int, RadioButton>();
points2buttons[200] = rbn200Points;
points2buttons[250] = rbn250Points;
...
foreach (var pointsButton in points2buttons) {
    var button = pointsButton.Value;
    var pts = pointsButton.Key;
    button.Text = pts + " pts";
    button.Checked = totalPoints>pts;
}
...

使用反射,您甚至可以自动填充字典。

于 2009-11-09T22:41:39.107 回答
2

将单选按钮及其关联的点值放在字典中可能会有所帮助:

// Untested.

int totalPoints = customer.TotalRewardPoints;

var radioButtons = new Dictionary<RadioButton, Int32>();
radioButtons.Add(rbn200Points, 200);
radioButtons.Add(rbn250Points, 250);
radioButtons.Add(rbn400Points, 400);
radioButtons.Add(rbn500Points, 500);
radioButtons.Add(rbn600Points, 600);

foreach (var keyValuePair in radioButtons)
{
  keyValuePair.Key.Text = String.Format("{0} pts", keyValuePair.Value);
  keyValuePair.Key.Enabled = (keyValuePair.Value < totalPoints);
  keyValuePair.Key.Checked = false;
}
于 2009-11-09T22:43:03.863 回答
1

好吧,您可以从不检查 if else 开始,然后使用

if (totalpoints >= val) control.enable

这将使您减少重复启用

于 2009-11-09T22:32:52.077 回答
0

您可以在 C# 中分配多个属性,如下所示:

if ( some condition )
{
     rbnA.Enabled = rbnB.Enabled = rbnC.Enabled = rbnD.Enabled = true;
} else {
     rbnA.Enabled = rbnB.Enabled = rbnC.Enabled = rbnD.Enabled = false;
}
于 2009-11-09T22:33:56.563 回答