c#循环的帮助
本文关键字:帮助 循环 | 更新日期: 2023-09-27 18:06:34
我刚刚完成了这段代码,并希望将下面的代码更改为循环。每个部门都有一个他们应该点击的特定按钮,并且应该只对部门1、2或3的人员可见。
谁能给我指点指点吗?
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;
}
}
将其转换为循环的最大挑战是基于数值获取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;
}
}
}
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;
}
}
}
试试这样:
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);
当然,如果你使用数组/列表按钮,它可以更容易…
。
Button[] buttons = new Button[] { btnDept1, btnDept2, btnDept3};
for (int i = 0; i < buttons.Length; i++)
SetButton(i, buttons[i]);
这里有一个更简单的方法来获得你想要的按钮。只需将i
的值附加到ActiveForm.Controls[...]
中的"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.
}
}
}