如何遍历页面中的每个Panel? 我的页面中有12个Panel,根据月份的不同显示不同的Panel,如用户选择5月份,则将Panel5设为visible设为true,其它设为false。如果手工对每个Panel的visible进行赋值,程序不易维护,且笨拙。能不能写一个循环遍历第一个Panel,请大家指教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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。保留所有权利。 foreach(Control ctl in this.Controls[1].Controls){ if(ctl is Panel) { if(...) { ((Panel)ctl).Visible=false; } }} 用递归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); } }} bitsbird(一瓢 闭关)的方法不错,其实不用GetType,用谓词不是更简单明了吗? foreach(control c in Page.Controls) Panel p = c as Panelif(p != null)... 把12个panel的ID设置成pnl1--pnl12,初始Visible都设置成false,然后用FindControl根据月份查找到对应的panel,找到了就把visible改成true,哈哈,我也不清楚啊,说出个想法来,不知行不行 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; } }}} 可以,楼上这个办法也可行,用this.findcontrol找12个panel你可以给你的panel命名是panel1,panel2....一直下去,然后用for..next循环就可 http://www.dian168.com/netcode/dtkj.htm里面有实例 datalist中的lable控件中的值怎么取 GridView里时间字段怎么格式化输出? 网页那些输入框自动保存的信息怎样清除? 在。NET中怎么实现倒数计时功能~有例子~急~ VS2005可不可以声明控件啊,如果有在哪里啊? (急,高分) 关于GRIDVIEW删除操作的问题!高手进! 问个笨问题啊。。。vs2005添加类引用怎么添加啊? asp.net程序在别的机子上运行出错,高手快进来看看 DataList 手动分页数据绑定时出现的编译错误 讨论:ASP.Net中服务器端控件的事件处理原理 【在线等】有没有办法遍历的设置子控件值。 关于遍历动态创建的控件的问题
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。保留所有权利。
{
if(ctl is Panel)
{
if(...)
{
((Panel)ctl).Visible=false;
}
}
}
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);
}
}
}
Panel p = c as Panel
if(p != null)
...
{
foreach(Control ctl in this.Controls[1].Controls)
{
if(ctl is Panel)
{
if(((Panel)ctl).ID=="pn"+i.ToString())
{
((Panel)ctl).Visible=true;
}
}
}}
你可以给你的panel命名是panel1,panel2....一直下去,然后用for..next循环就可