在C#中巧用foreach语句

2011-02-21 00:00 编辑:admin 来源:发表论文 浏览:

      【摘要】:本文通过利用C#语言规范中foreach语句循环访问的功能来"遍历"某(每)控件容器的所有控件,实现调用对其它窗体上某个控件调用,或实现对一组控件批量操作的实例,从而启发读者举一反三,充分利用开发软件的潜在功能而心想事成,达到抛砖引玉的效果。

         【关键词】:foreach,控件,遍历

         为了适应Internet的快速发展,微软自2000年推出了.NET战略,反映了微软这位软件巨人对未来软件的思考,囊括了微软所有的最新技术成果,从而掀起了计算机领域的一场革命;毫无疑问,Visual C#语言是.NET技术的核心开发语言,是.NET新技术最忠实的实践者和实现者。根据微软的定义,foreach语句为数组或对象集合中的每个元素重复一个嵌入语句组。该语句对于数组的操作请参照微软提供的样例,而对于"对象集合"的应用,微软既未明确"对象集合"的范围,又未给出样例。本文就"对象集合"作为控件集合来探讨foreach语句的应用。

          实现调用其它窗体上的控件由于.NET技术采用结构化程序设计思想,所有控件都封装在各自的窗体中,为了尽量最小占用系统资源,在C#项目中的一个窗体不能调用其它窗体的控件;而我们在实际开发中又经常会遇到调用其它窗体的控件的情形,特别是在项目中采用一个父窗体多个子窗体架构时,这种调用不可避免的。要进行这种调用,稍有编程经验的人首先想到将需要被调用的控件所在的窗体作为当前窗体的函数参数传递过来,然后调用。

         如下程序实现在当前窗体Form1调用中窗体Form2。首先在Form1的构造函数中把Form2加进去,如:class form1:Form{form2 myForm;public form1(form2 f){this.myForm=f;}}然后在Form1中通过this.myForm就可以调用Form2了,这时如果你有this.myForm.Text="aa"这样的语句确实能够实现,但是this.myForm在Form1中只是表示一个窗体容器,这也就意味着你只能调用窗体的共有属性如Visible、Width等属性,如果你仅想对一个窗体的共有属性或某个特定控件进行操作,如对活动控件进行操作,可以在Form2中用"this.ActiveControl=this.Button1;"把按钮Button1指定为活动控件,然后在Form1中"Button m=(Button)this.myForm.ActiveControl;m.PerformClick();"从而执行对Form2中Button的Click事件。但是窗体Form2一般情况下也是要接受用户操作的,你不能保证该Button一直是活动控件,并且,假如需要对Form2中多个控件进行操作呢?而该思路无法对目标窗体上的普通控件进行操作,并且这种企图把整个窗体(仅传递窗体名代表的地址不能解决问题)作为参数来传递是任何一个优秀程序员所不能容许的。推荐采用foreach语句,在下面的程序中利用foreach语句"遍历"的功能,实现在"遍历"父窗体中当前活动子窗体的所有控件,找到并调用其Name中包含"打印"的按钮,执行该按钮的Click事件,类似如Word中主菜单的"打印"选项。foreach(Form mychild in this.MdiChildren){if(this.ActiveMdiChild==mychild)//查找父窗体中当前活动子窗体{foreach(Control tempCtrl in mychild.Controls){string str=tempCtrl.Name;int animalIndex=str.IndexOf("打印");if(animalIndex!=-1)//查找该控件的Name中是否有"打印"{try{Button m=(Button)mybutton;m.PerformClick();}catch{MessageBox.Show("该页不存在打印按钮!");}}}}}二、实现对一组控件批量操作其实利用foreach语句"遍历"控件的功能不仅单个控件进行操作,还可以用于对某个容器内的所有控件进行批量操作,如下面的程序将当前窗体中选项卡容器tabControl1中的每个选项卡中所有控件的Text包含的字符"温度"都改为"流速"。

    热门论文

    随机硕士毕业

    全站推荐研究生毕业论文

    热门毕业论文范文