foreach 、Label

问题描述

foreach(Panelpaninpanel2.Controls){if(pan.Name=="pan"+i.ToString()){//遍历datagridviewforeach(Controlainpan.Controls){if(a.Name=="data"+i.ToString()){DataGridViewdata=aasDataGridView;MessageBox.Show("datagridview成功!");}}//遍历labelforeach(Controlbinpan.Controls){if(b.Name=="lab"+i.ToString()){Labellab1=basLabel;MessageBox.Show("Label失败!")}}}

那么问题来了,为什么遍历DataGridView就能成功找到控件、Label就不行呢???求指点

解决方案

解决方案二:
没遇到过,我觉得是Labellab1=basLabel;

这个有问题
解决方案三:
MessageBox.Show("datagridview成功!");你这也算找到控件??要DataGridViewdata=aasDataGridView;判断data是否等于null的,不等于null,说明找到了。另完全看不懂你遍历label中的if语句有什么意义。
解决方案四:
引用1楼u010379510的回复:

没遇到过,我觉得是Labellab1=basLabel;

这个有问题

不,它只是赋值了,并没有判断lab1是否等于null,所以这段代码没意义。
解决方案五:
你这段代码找到Label也会报失败的。
解决方案六:
虽然没看懂你的意图,本着得分的心态foreach(Panelpaninpanel2.Controls){if(pan.Name=="pan"+i.ToString()){//遍历datagridviewforeach(Controlainpan.Controls){if(a.Name.Trim()=="data"+i.ToString()){DataGridViewdata=aasDataGridView;MessageBox.Show("datagridview成功!");}elseif(b.Name.Trim().ToLower()=="lab"+i.ToString()){//遍历labelLabellab1=basLabel;MessageBox.Show("Label失败!")}}}

解决方案七:
1234567891011121314151617181920212223foreach(Panelpaninpanel2.Controls){if(pan.Name=="pan"+i.ToString()){//遍历datagridviewforeach(Controlainpan.Controls){if(a.Name.Trim()=="data"+i.ToString()){DataGridViewdata=aasDataGridView;MessageBox.Show("datagridview成功!");}elseif(a.Name.Trim().ToLower()=="lab"+i.ToString()){//遍历labelLabellab1=basLabel;MessageBox.Show("Label失败!")}}}

解决方案八:
可能是Label的父控件不是pan,而是另外一个可以嵌套Label的控件,这个控件的父控件可能才是pan,如果是这样,那么foreachpan的子控件,当然是找不到Label了。
解决方案九:
引用7楼LanMangFeiGe的回复:

可能是Label的父控件不是pan,而是另外一个可以嵌套Label的控件,这个控件的父控件可能才是pan,如果是这样,那么foreachpan的子控件,当然是找不到Label了。

是的,比如pan里面嵌套着一个panel,panel里面有几个label,上面的代码是遍历不到的(这种情况,需要递归遍历)上面代码做的改掉,主要是忽略标签名大小写的问题
解决方案十:
privatevoidYouMethod(Controlcontainer){....foreach(Panelpaninpanel2.Controls){if(pan.Name=="pan"+i.ToString()){//遍历datagridviewforeach(Controlainpan.Controls){if(a.Name.Trim()=="data"+i.ToString()){DataGridViewdata=aasDataGridView;MessageBox.Show("datagridview成功!");}elseif(a.Name.Trim().ToLower()=="lab"+i.ToString()){//遍历labelLabellab1=basLabel;MessageBox.Show("Label失败!")}//递归if(a.HasChildren)YouMethod(a);}}....}

增加了递归遍历
解决方案十一:
第一次调用的时候YouMethod(panel2);privatevoidYouMethod(Controlcontainer){....foreach(Panelpanincontainer.Controls){if(pan.Name=="pan"+i.ToString()){//遍历datagridviewforeach(Controlainpan.Controls){if(a.Name.Trim()=="data"+i.ToString()){DataGridViewdata=aasDataGridView;MessageBox.Show("datagridview成功!");}elseif(a.Name.Trim().ToLower()=="lab"+i.ToString()){//遍历labelLabellab1=basLabel;MessageBox.Show("Label失败!")}//递归if(a.HasChildren)YouMethod(a);}}....}

解决方案十二:
找控件还是根据类型找比较可靠
解决方案十三:
//遍历datagridviewforeach(Controlainpan.Controls){//遍历labelforeach(Controlbinpan.Controls)你这注释不靠谱吖。。。这明明遍历的东西一样。。。所有pan.Controls
解决方案十四:
foreach(Panelpaninpanel2.Controls){if(pan.Name=="pan"+i.ToString()){//遍历datagridviewforeach(Controlainpan.Controls){if(a.Name=="data"+i.ToString()){DataGridViewdata=aasDataGridView;MessageBox.Show("datagridview成功!");}//遍历labelif(a.Name=="lab"+i.ToString()){Labellab1=aasLabel;MessageBox.Show("Label失败!")}}}

把二个if放在一起。应该就可以了。可以试一下。在用typeof()判断一下类型
解决方案十五:
label装在某个容器,而不是直接在窗体中,需要递归遍历下。
解决方案:
foreach(Controlbinpan.Controls){if(b.Name=="lab"+i.ToString()){Labellab1=basLabel;MessageBox.Show("Label失败!")}}

注意这行。MessageBox.Show("Label失败!")你找到了。是提示的失败。
解决方案:
你这样遍历不行哦~~~就拿这段而言foreach(Controlainpan.Controls){if(a.Name=="data"+i.ToString()){DataGridViewdata=aasDataGridView;MessageBox.Show("datagridview成功!");}}万一a的Name是data+i.ToString(),但它不是DataridView控件呢??我给你个webform的吧System.Web.UI.WebControls.TextBoxtxt;System.Web.UI.WebControls.DropDownListddl;foreach(ControlMainControlinthis.Page.Controls){foreach(ControlobjControlinMainControl.Controls){if(objControl.GetType().ToString()=="System.Web.UI.WebControls.TextBox"){txt=(System.Web.UI.WebControls.TextBox)objControl;if(txt.ClientID!="txtWorker_No"&&txt.ClientID!="txtChecker_No"&&txt.ClientID!="txtWork_Dt"&&txt.ClientID!="txtTemp"&&txt.ClientID!="txtChecker_Nm"&&txt.ClientID!="txt_SureNm"&&txt.ClientID!="txtSign_Nm"&&txt.ClientID!="txtWorker_Nm"){txt.Text="";}}if(objControl.GetType().ToString()=="System.Web.UI.WebControls.DropDownList"){ddl=(System.Web.UI.WebControls.DropDownList)objControl;if(ddl.ClientID!="ddl_Shift"&&ddl.ClientID!="ddlPlant_Site_Cd"){ddl.SelectedIndex=-1;}}}}this.txtS_No.Focus();

解决方案:
你还要对比Control的类型吧!!

时间: 2024-07-31 17:38:41

foreach 、Label的相关文章

WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展

原文:WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式.水印.Label标签.功能扩展 一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要是对文本输入控件进行样式开发,及相关扩展功能开发,主要内容包括: 基本文本框TextBox控件样式及扩展功能,实现了样式.水印.Label标签.功能扩展: 富

JS中的forEach、$.each、map方法推荐_javascript技巧

forEach是ECMA5中Array新方法中最基本的一个,就是遍历,循环.例如下面这个例子: [1, 2 ,3, 4].forEach(alert); 等同于下面这个for循环 var array = [1, 2, 3, 4]; for (var k = 0, length = array.length; k < length; k++) { alert(array[k]); } Array在ES5新增的方法中,参数都是function类型,默认有传参,forEach方法中的function回

5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例_javascript技巧

ECMAScript5标准发布于2009年12月3日,它带来了一些新的,改善现有的Array数组操作的方法.然而,这些新奇的数组方法并没有真正流行起来的,因为当时市场上缺乏支持ES5的浏览器. Array "Extras" 没有人怀疑这些方法的实用性,但写polyfill(PS:兼容旧版浏览器的插件)对他们来说是不值得的.它把"必须实现"变成了"最好实现".有人居然将这些数组方法称之为Array "Extras".哎! 但是,

php foreach、while性能比较_php技巧

foreach是对数组副本进行操作(通过拷贝数组),而while则通过移动数组内部指标进行操作,一般逻辑下认为,while应该比foreach快(因为foreach在开始执行的时候首先把数组复制进去,而while直接移动内部指标.),但结果刚刚相反. 在循环里进行的是数组"读"操作,则foreach比while快: 复制代码 代码如下: foreach ($array as $value) { echo $value; } while (list($key) = each($array

学习Winform文本类控件(Label、Button、TextBox)_C#教程

对于一个应用程序而言,控件是搭建用户界面的积木.它们具备交互式的特征.VS 2012中的控件都放在工具箱中,添加一个控件到窗体,只需在工具箱中选择好要添加的控件,并按住鼠标左键,拖动到窗体上即可.向窗体上添加控件还有另一个方法,就是通过代码来实现,即可通过窗体的Controls类的Add方法,格式为:窗体标识.Controls.Add(控件标识).通过代码的方法添加控件比较麻烦,基本上是不会使用这种方法的. 文本类控件包含标签控件(Label),按钮控件(Button),文本框控件(TextBo

浅谈php中的循环while、do...while、for、foreach四种循环_php实例

php中的while循环,循环执行代码块制定的次数,或者当指定的条件为真时循环执行代码块. ------------------------------------------------------------- 在我们编写代码是时候,我们经常需要一块代码块重复执行多次.我们就可以使用while循环语句来完成这个任务. while--只要指定条件成立,则循环执行代码块. do...while--首先执行一次代码块,然后在指定的条件成立时重复这个循环. for--循环执行代码块制定的次数. fo

html中label宽度设置、非替换元素和替换元素

<label ></label> 单独对label设置一个width:100px的属性石不起作用的,和float:left或者display:inline-block配合的话 都可以设置上  参考:css position, display, float 内联元素.块级元素  在 CSS 中,任何元素都可以float浮动.浮动元素会生成一个块级框,而不论它本身是何种元素.如果浮动非替换元素,则要指定一个明确的宽度:否则,它们会尽可能地窄. 元素是文档结构的基础,在css里面,每个元

浅谈JavaScript、ES5、ES6

什么是JavaScript JavaScript一种动态类型.弱类型.基于原型的客户端脚本语言,用来给HTML网页增加动态功能.(好吧,概念什么最讨厌了) 动态: 在运行时确定数据类型.变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型. 弱类: 计算时可以不同类型之间对使用者透明地隐式转换,即使类型不正确,也能通过隐式转换来得到正确的类型. 原型: 新对象继承对象(作为模版),将自身的属性共享给新对象,模版对象称为原型.这样新对象实例化后不但可以享有自己创建时和运行时定义的属性,

制作自己的分隔线控件(LineH、LineV)

控件 以前用Delphi开发软件的时候,如果需要在界面上放置一个分隔线,其自带的TBevel可以很好地满足这一要求.现在转到了.NET平台,竟找不到对应的控件(毕竟每次在Paint事件中画太麻烦).而如果用Panel.GroupBox.Label来间接实现,效果不够理想,并且感觉怪怪的.因此决定自己实现一个分隔线控件,效果如下图所示: 在这里我只将核心代码贴出来,关于创建自定义控件的相关知识可参考MSDN: ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.20