2013-03-28 201 views
0

我剛剛完成了這段代碼,並想將下面的代碼更改爲循環。每個部門都有一個特定的按鈕,他們可以點擊並且只能在部門1,部門2或部門3中看到。C#循環幫助

有人可以給我一些指導。

   pchk.Visible = true; 

       Int32 count = 0; 
     count = chk.GetCount(1); 
     // dept 1 
       if (count == -1) 
       { 
        btnDept1.Visible = false; 
       } 
       else 
       { 
        btnDept1.Text = "Next dep1[" + count.ToString() + "]"; 
        if (count == 0) 
         btnDept1.Enabled = false; 
       } 

       // dept 2 
       count = chk.GetCount(2); 
       if (count == -1) 
       { 
        btnDept2.Visible = false; 
       } 
       else 
       { 
        btnDept2.Text = "Next dep2 [" + count.ToString() + "]"; 
        if (count == 0) 
         btnDept02.Enabled = false; 
       } 
       // dept 3 
       count = chk.GetCount(3); 
       if (count == -1) 
       { 
        btnDept3.Visible = false; 
       } 
       else 
       { 
        btnDept3.Text = "Next dept3 [" + count.ToString() + "]"; 
        if (count == 0) 
         btnDept3.Enabled = false; 
       } 
      } 
+1

可能需要開始把按鈕放在一個列表中,以便您可以循環播放它們。 – AaronLS

+0

你的代碼是不完整的,如果你已經包含了所有代碼,甚至不會編譯。 (例如,你可以在'if(count == -1)'分支中引用'btnDept2'和'btnDept02'。如果你想在這裏獲得幫助,請發佈**真實的,可編譯的代碼**。現貨代碼經常隱藏實際問題,並且它幾乎總是浪費人們的時間(你要求免費幫助的人,順便說一句)。 –

回答

0
for (int i = 1; i <= 3; i++) 
    { 
     count = chk.GetCount(i); 
     if (count == -1) 
     { 
      switch (i) 
      { 
       case 1: 
        btnDept1.Visible = false; 
        break; 
       case 2: 
        btnDept2.Visible = false; 
        break; 
       case 3: 
        btnDept3.Visible = false; 
        break; 
      } 
     } 
     else 
     { 
      switch(i) 
      { 
       case 1: 
        btnDept1.Text = "Next dep1[" + count.ToString() + "]"; 
        if (count == 0) 
         btnDept1.Enabled = false; 
        break; 
       case 2: 
        btnDept1.Text = "Next dep1[" + count.ToString() + "]"; 
        if (count == 0) 
         btnDept1.Enabled = false; 
        break; 
       case 3: 
        btnDept1.Text = "Next dep1[" + count.ToString() + "]"; 
        if (count == 0) 
         btnDept1.Enabled = false; 
        break; 
      } 
     } 
    } 
+3

你並不是像他需要的那樣增加每個迭代的「按鈕」btnDept1,btnDept2。 ..etc – Inisheer

+0

你的代碼對循環中的每個數字改變'btnDept'都沒有任何作用 –

+1

也許會做類似於Button [] buttons = new [btnDept1,btnDept2,btnDept3]; buttons [count] .Text = blah blah; –

3

與此轉換爲一個循環基礎上的數值是獲得btnDept1值最大的挑戰。一種方法是引入其做此與switch語句

Button GetButton(int id) { 
    switch (id) { 
    case 1: return btnDept1; 
    case 2: return btnDept2; 
    ... 
    } 
} 

或者另一種辦法是讓他們在一個數組和使用索引來訪問陣列的方法。無論哪種方式,一旦你有,你可以摺疊到一個循環,通過以下方式

for (int i = 0; i < TheCount; i++) { 
    int id = i + 1; 
    Button button = GetButton(id); 
    int count = chk.GetCount(2); 
    if (count == -1) { 
    button.Visible = false; 
    } else { 
    button.Text = String.Format("Next dep{0} [{1}]", id, count); 
    if (count == 0) { 
     button.Enabled = false; 
    } 
    }     
} 
0

嘗試是這樣的:

private void SetButton(int id, Button btn) 
{ 
    var count = chk.GetCount(id); 
    if (count == -1) 
    { 
     btn.Visible = false; 
    } 
    else 
    { 
     btn.Text = String.Format("Next dep{0}[{1}]", id.ToString(), count.ToString()); 
     if (count == 0) 
      btn.Enabled = false; 
    } 

} 

用途可以是這樣的:

SetButton(1, btnDept1); 
SetButton(2, btnDept2); 
SetButton(3, btnDept3); 

中當然,如果您使用按鈕陣列/列表,它可以更容易...

eg

Button[] buttons = new Button[] { btnDept1, btnDept2, btnDept3}; 
for (int i = 0; i < buttons.Length; i++) 
    SetButton(i, buttons[i]); 
0

這是一個更簡單的方法來獲得你想要的按鈕。只需在ActiveForm.Controls[...]中將i值附加到「btnDept」。檢查空,並去工作...

for (int i = 0; i < deptCount; i++) 
    { 
     Button b = ActiveForm.Controls["btnDept" + i.ToString()] as Button; 

     if (b != null) 
     { 
      if (count == -1) 
      { 
       b.Visible = true; 
      } 
      else 
      { 
       // etc. 
      } 
     } 
    }