2009-11-09 238 views
0

我覺得這是一堆你明白我的意思。它的工作原理,但我覺得我在頁面生命週期(加載和回發)方面超越了這一點,甚至在我的每個if語句中都有冗餘。重寫多個if語句

什麼情況是這樣的:

  1. 這種方法被稱爲上非常 頁面加載(無論任何回發或 )
  2. 如果用戶提交 形式,它減少了他們totalPoints(有一個這些單選按鈕下面的按鈕,允許他們提交和聲明積分)。

所以我把這種方法也從他們的總周邊的下一次下降 這些點之後的 用戶索賠點(的提交)。所以 基於其 帳戶的總積分上,我需要啓用/禁用這些 單選按鈕的頁面從上次刷新後提交

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; 
    } 
} 
+3

這個問題需要一個更具描述性的標題。 – ahsteele 2009-11-09 22:37:51

+0

更改標題,是否更好? – sharkin 2009-11-09 22:52:33

+0

我認爲「重寫多個if語句」可能是一個更具描述性的標題。 – 2009-11-09 22:55:11

回答

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; 
} 
+0

不,這將啓用低點按鈕。您需要在rhs表達式中使用該範圍的兩側。 (rbn250Points.Enabled = totalPoints> = 250 && totalPoints <400;) – 2009-11-09 22:34:39

+0

雅各布,從代碼,似乎是他在做... – 2009-11-09 22:37:20

+0

是的,這使得更多一點常識。好的,那麼在計算新點之後如何清除按鈕和回發呢?它正在檢查頁面加載和點擊提交按鈕後,因爲我調用了這個方法兩次(頁面加載一次,如果他們沒有提交buttong,並首次來到頁面,如果他們提交另一個表格) – PositiveGuy 2009-11-09 22:38:02

1

那麼,你可以用別的,如果不檢查啓動,並使用

if (totalpoints >= val) control.enable 

其中W生病讓你少但卻難免重複使

0

您可以在C#如下分配多個屬性:

if (some condition) 
{ 
    rbnA.Enabled = rbnB.Enabled = rbnC.Enabled = rbnD.Enabled = true; 
} else { 
    rbnA.Enabled = rbnB.Enabled = rbnC.Enabled = rbnD.Enabled = false; 
} 
+2

是啊,我不喜歡這樣的鏈接,很難閱讀。 – PositiveGuy 2009-11-09 22:49:59

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; 
} 
2

OMG,夥計。這是一個瘋狂的代碼重複量。

我還沒有碰過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; 
} 
... 

使用反射,你甚至可以自動填充字典。

+1

沒有sh **這就是爲什麼我要求一些幫助 – PositiveGuy 2009-11-09 22:46:28

+0

一個問題,按鈕沒有你的想法的價值。值爲0,1,2,3。此外,button.Checked = false由於某種原因 – PositiveGuy 2009-11-09 22:48:23

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; 
} 
+0

我沒有使用一個RadioButtonList,只是一羣ASP.NET的單選按鈕被一個Group屬性綁定在一起,所以沒有可以在單個RadioButton控件上使用的「value」屬性 – PositiveGuy 2009-11-09 22:59:51

+0

否不,他不是試圖在RadioButton上引用一個值,而是在他從字典中得到的鍵/值對對象上。我很久沒有完成VB了,如果有一個Dictionary對象可用,那麼我就沒有不熟悉它,但重點是創建一個對象,將每個按鈕與一個值配對,然後使用循環來遍歷它們,而不是單獨處理每個按鈕。 – Jay 2009-11-09 23:14:27

+0

ah,yea,有道理,忘記了字典值。 – PositiveGuy 2009-11-09 23:16:53