我的页面中有12个Panel,根据月份的不同显示不同的Panel,如用户选择5月份,则将Panel5设为visible设为true,其它设为false。如果手工对每个Panel的visible进行赋值,程序不易维护,且笨拙。能不能写一个循环遍历第一个Panel,请大家指教!

解决方案 »

  1.   

    C# 程序员参考   foreach, in请参见
    C# 关键字 | 迭代语句 | C. 语法
    foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组。foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。此语句的形式如下:foreach (type identifier in expression) statement
    其中: type 
    identifier 的类型。 
    identifier 
    表示集合元素的迭代变量。如果迭代变量为值类型,则无法修改的只读变量也是有效的。 
    expression 
    对象集合或数组表达式。集合元素的类型必须可以转换为 identifier 类型。请不要使用计算为 null 的表达式。 
    而应计算为实现 IEnumerable 的类型或声明 GetEnumerator 方法的类型。在后一种情况中,GetEnumerator 应该要么返回实现 IEnumerator 的类型,要么声明 IEnumerator 中定义的所有方法。 statement 
    要执行的嵌入语句。 
    备注
    嵌入语句为数组或集合中的每个元素继续执行。当为集合中的所有元素完成迭代后,控制传递给 foreach 块之后的下一个语句。有关 foreach 关键字的更多信息(包括代码示例),请参见下面的主题: 对数组使用 foreach 
    对集合使用 foreach 
    请参见
    C# 关键字 | 迭代语句 | C. 语法--------------------------------------------------------------------------------向 Microsoft 发送有关此主题的反馈© Microsoft Corporation。保留所有权利。
      

  2.   

    foreach(Control ctl in this.Controls[1].Controls)
    {
        if(ctl is Panel)
        {
            if(...)
             {
                 ((Panel)ctl).Visible=false;
             }
        }
    }
      

  3.   

    用递归
    private void findControls(Control control)
    {
    foreach (Control c in control.Controls)
    {
    string cType = c.GetType().Name;
    switch(cType)
    {
    case "TextBox":
    ((TextBox)c).Enabled = false;
    break;
    case "DropDownList":
    ((DropDownList)c).Enabled = false;
    break;
    case "Button":
    ((Button)c).Visible = false;
                                         break;
    } if (c.Controls.Count > 0)
    {
    disabledControls(c);
    }
    }
    }
      

  4.   

    bitsbird(一瓢 闭关)的方法不错,其实不用GetType,用谓词不是更简单明了吗?
      

  5.   

    foreach(control c in Page.Controls)
      Panel p = c as Panel
    if(p != null)
    ...
      

  6.   

    把12个panel的ID设置成pnl1--pnl12,初始Visible都设置成false,然后用FindControl根据月份查找到对应的panel,找到了就把visible改成true,哈哈,我也不清楚啊,说出个想法来,不知行不行
      

  7.   

    for(int i=0;i<12;i++)
    {
    foreach(Control ctl in this.Controls[1].Controls)
    {
        if(ctl is Panel)
        {
            if(((Panel)ctl).ID=="pn"+i.ToString())
             {
                 ((Panel)ctl).Visible=true;
             }
        }
    }}
      

  8.   

    可以,楼上这个办法也可行,用this.findcontrol找12个panel
    你可以给你的panel命名是panel1,panel2....一直下去,然后用for..next循环就可
      

  9.   

    http://www.dian168.com/netcode/dtkj.htm里面有实例