解决方案 »
- 在VS2005中双击.aspx文件却是在记事本中打开的,而且是乱码。
- 高难度啊,C#如何缩放图片
- 如何扩展vs控件
- 新手求助!
- 小问题:水晶报表传参数时,“CrystalDecisions.Shared.ParameterValues”并不包含对“add”的定义
- 网页数据抓取问题,希望有高人来指点迷津一下!
- 请问百度里面我输入的查询 的东西 当我再一次搜索的时候 能够自动出来
- 考试管理系统
- 请问,如何随机产生一个字符串
- 现在是晚上2点,郁闷啊! 关于消息的发送与接收
- Dsoframer怎么设置插入书签的字符有下划线
- 下午做winform的时候遇到个问题,提示也出来了,大家帮忙看看,给100分。解决问题者全给!在线等,急急急急急急急!
比方说,你的窗体上有一个Panel控件,Panel里面有两个TextBox,你直接遍历this.Controls只能遍历到Panel
要遍历到Panel里面的控件,需要递归
2、如果你的窗体不存在控件嵌套的情况,试试下面的代码(盲敲的,可能有错误)
foreach (Control c in this.Controls)
{
if (c is TextBox)
{
TextBox txt = c as TextBoX
if(String.IsEmpty(txt.Text))
{
flag = true;
break;
}
}
}
foreach (Control c in panel1.Controls){
//........
}
public void LoopControls(Control container)
{
foreach (Control c in container.Controls)
{
if (c is TextBox)
{
TextBox txt = c as TextBoX
if(String.IsEmpty(txt.Text))
{
flag = true;
break;
}
}
//递归
if(c.HasChildren)
LoopControls(c);
}
}
大神帮忙看看是我哪里错了呢?
但这样是治标不治本的,假如panel1里还有一个panel2,就不起作用了,最好的办法就是递归检索窗体中的所有控件,参考5楼的方案。
另外,判断控件是不是TextBox,不要用那种比较类型名称的愚蠢办法,应该用is运算符,同样参考5楼。
private void BindData(Control c)
{
//......
if (c.HasChildren)
{
foreach (Control control in c.Controls)
{
BindData(control);
}
}
}
改成LoopControls(this)