【问题标题】:For loop on multiple check boxes多个复选框上的 for 循环
【发布时间】:2013-08-30 07:39:51
【问题描述】:

我有名为 CheckBox1、CheckBox3、CheckBox5、CheckBox7、CheckBox9、CheckBox11 的复选框。我想遍历这些复选框并希望禁用它们。我是这样写的

for (int i=1; i < 12; i++)
{              
    ((CheckBox)(i.ToString())).Enabled = false;
    i=i+2;
}

但这不是正确的方法。请帮忙

【问题讨论】:

  • 或者,考虑使用 CheckBoxList。 stackoverflow.com/questions/3260428/…
  • 由于某种原因,您不能使用 CheckBoxList,如上所述,我认为这是合适的,考虑使用以下方法获取对这些复选框的引用:(this.FindControl("&lt;construct your checkbox ID&gt;") as CheckBox)
  • 在循环中包含 i=i+2 行将导致您的循环执行:i=1, i=4, i=7, i=10。要么输入for (int i=1; i &lt; 12; i+2),要么在循环中将其更改为i=i+1
  • @Basic 如果我错了,请纠正我,但它不会:i=i+2 在循环结束时然后i++ 在继续循环时?所以基本上i=i+3
  • @iabbott 抱歉,您完全正确 - 我没有意识到 i 也在 for() 中增加,因为两者都做是不寻常的。我将删除我的 cmets 以消除混乱。道歉

标签: c# asp.net


【解决方案1】:

如果您有 Checkbox1、Checkbox3 等控件的 ID,请尝试像这样使用 FindControl

for (int i = 1; i < 12; i+=2)
{
  CheckBox cb = (CheckBox)Page.FindControl("Checkbox" + i);
  cb.Enabled = false;
}

【讨论】:

  • 不要有 i++ 然后将 i 增加 i = i+2,只需在循环声明中使用 i+2
  • @NWard 谢谢我没有看到那部分。但谢谢你的好点。我已经更新了帖子
  • i += 2,否则您会一遍又一遍地更新同一个实例(i 不会增加)
【解决方案2】:

您的代码想为 id 末尾有奇数的复选框设置 enabled=false 吗?然后就可以了

foreach (Control ctrl in Page.Controls)
{
   if (ctrl is CheckBox && ctrl.id.length > 9)
   {
      int chkboxNumber = int.Parse(ctrl.id.SubStr(9));
      if ( chkboxNumber % 2 == 1) // Check for odd numbers
      {
          (CheckBox)ctrl.Enabled = false; 
      }
   }
}

【讨论】:

    【解决方案3】:

    希望对您有所帮助。

    foreach (Control c in Page.Controls)
    {
       if (c is CheckBox)
       {
          CheckBox myCheckBox = (CheckBox)c;
          myCheckBox.Enabled = false;
       }
    }
    

    这将禁用您拥有的所有复选框。 编辑:抱歉没有在i 看到 +2。我的错。

    【讨论】:

    • 我想到了类似的东西,但控件名称“1,3,5”表明还有其他复选框需要保持不变
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 2021-11-22
    • 2021-02-11
    • 1970-01-01
    相关资源
    最近更新 更多