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

c#循环的帮助

将其转换为循环的最大挑战是基于数值获取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.
            }
        }
    }