2013-03-28 157 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. 
      } 
     } 
    }